mkdir -p
একটি ডিরেক্টরি তৈরি করবে; এটি প্রয়োজনীয় হিসাবে পিতামহুল ডিরেক্টরি তৈরি করবে।
ফাইলগুলির জন্য কি একই রকম কমান্ড উপস্থিত রয়েছে, যা প্রয়োজন মতো একটি ফাইল এবং পিতামাত ডিরেক্টরি তৈরি করবে?
mkdir -p
একটি ডিরেক্টরি তৈরি করবে; এটি প্রয়োজনীয় হিসাবে পিতামহুল ডিরেক্টরি তৈরি করবে।
ফাইলগুলির জন্য কি একই রকম কমান্ড উপস্থিত রয়েছে, যা প্রয়োজন মতো একটি ফাইল এবং পিতামাত ডিরেক্টরি তৈরি করবে?
উত্তর:
উত্স ফাইল দেওয়া হলে ইনস্টল এটি করবে /dev/null
। -D
যুক্তি সব পিতা বা মাতা ডিরেক্টরি তৈরি করতে বলে:
anthony@Zia:~$ install -D /dev/null /tmp/a/b/c
anthony@Zia:~$ ls -l /tmp/a/b/c
-rwxr-xr-x 1 anthony anthony 0 Jan 30 10:31 /tmp/a/b/c
এটি কোনও বাগ বা না তা নিশ্চিত না - ডিভাইস ফাইলগুলির সাথে এর আচরণটি ম্যানপেজে উল্লেখ করা হয়নি। আপনি mktemp
উত্স হিসাবে এটি কেবল একটি ফাঁকা ফাইল দিতে পারেন ( উদাহরণস্বরূপ নতুনভাবে তৈরি , উদাহরণস্বরূপ)।
আমি প্রায়শই এই ধরণের পরিস্থিতিতে পড়েছিলাম, তাই আমি কেবল আমার .bashrc
ফাইলে একটি ফাংশন লিখেছি । দেখে মনে হচ্ছে
function create() {
arg=$1
num_of_dirs=$(grep -o "/" <<< $arg | wc -l)
make_dirs=$(echo $arg | cut -d / -f1-$num_of_dirs)
mkdir -p $make_dirs && touch $arg
}
সুতরাং, যখন আমি অস্তিত্বহীন ডিরেক্টরিগুলির একটি পথের ভিতরে কোনও ফাইল তৈরি করতে চাই, তখন আমি বলব
create what/is/it # will create dirs 'what' and 'is', with file 'it' inside 'is'
touchp
, যেমনmkdir -p
dir=$(dirname "$f")
test -d $dir || mkdir -p "$dir"
test
প্রয়োজন না হয়; mkdir -p
দির ইতিমধ্যে উপস্থিত থাকলে কিছু করবে না। এমনকি কোনও ত্রুটিও ফেরায় না।
আমি এটি এক লাইনে রাখার সাথে সাথে পরামর্শ দিতে যাচ্ছিলাম, যদিও পৃথকভাবে ভেরিয়েবলটি সেট করা আপনাকে এটি পরিবর্তন করতে এবং ইতিহাস থেকে কমান্ডটি খুব সহজেই পুনরায় চালু করতে দেয়।
B="./make/this/path" && mkdir -p -- "$B" && touch -- "$B/file.txt"
এটি "নকল" করা সম্ভব।
রব গ্রিফিথস ২০০ 2007 সালে ম্যাকওয়ার্ল্ড.কম এ সহজেই প্রচুর নতুন ফোল্ডার তৈরি করুন শিরোনামে একটি নিবন্ধ পোস্ট করেছিলেন যেখানে তিনি নির্দেশাবলী ব্যবহার করে xargs
ফাইলগুলির একটি তালিকায় পড়ার জন্য কমান্ডটি ব্যবহার করে আলোচনা করেছিলেন mkdir
।
xargs
পতাকা সহ একটি placeholder
( {}
) রেফারেন্স করতে সক্ষম -I
, এতে প্রতিটি আর্গুমেন্টের জন্য মূল্য দেওয়া আছে xargs
। এখানে পতাকাটির সাথে এবং বাইরে পার্থক্য রয়েছে:
$ foo.txt bar.txt | xargs echo
$ => foo.txt bar.txt
$ foo.txt bar.txt | xargs -I {} echo {}
$ => foo.txt
$ => bar.txt
xargs
sh -c
পতাকা সহ নির্বিচারে শেল কমান্ড চালাতে সক্ষম :
foo.txt bar.txt | xargs sh -c 'echo arbitrary command!'
আমরা এই ধারণাগুলির mkdir -p
পরিবর্তে mkdir
এবং ধারণার সাথে @ldx এর উত্তরে একত্রিত করতে পারি এটি উত্পাদন করতে:
$ cat files.txt | xargs -I {} sh -c 'f="{}" && mkdir -p -- "${f%/*}" && touch -- "$f"'
এই কমান্ডটি মূলত প্রতিটি ফাইলের নাম একটি ফাইলের লাইন-বিচ্ছিন্ন তালিকায় ম্যাপ করে, ফাইল অংশটি ছাড়ে, ডিরেক্টরিগুলি তৈরি করে mkdir -p
এবং তারপরে ডিরেক্টরি সম্পর্কিত ফাইল ডিরেক্টরিটি সম্পর্কিত ডিরেক্টরিতে তৈরি করে touch
।
উদাহরণস্বরূপ আমার files.txt
চেহারা এর মত বলুন :
deeply/nested/foo/bar.txt
deeply/nested/baz/fiz.txt
cat files.txt
উত্পাদন করে deeply/nested/foo/bar.js
deeply/nested/baz/fiz.txt
deeply/nested/foo/bar.js
deeply/nested/baz/fiz.txt
পাইপ করা হয় xargs
-I {}
, xargs
প্রতিটি যুক্তি তার নিজস্ব কমান্ডে অনুবাদ করবে, সুতরাং আমাদের এখন রয়েছে:
deeply/nested/foo/bar.txt
deeply/nested/baz/fiz.txt
&&
চালাচ্ছি যা সংযোজকটি 3 টি কমান্ডকে ধারাবাহিকভাবে চালিত করে - প্রথম কমান্ড ফাইলটি পরিবেশের ভেরিয়েবলে সংরক্ষণ করে (যা পরবর্তী ফাইল পাসে পুনরায় ব্যবহৃত হয়) আমরা পূর্বে নিবন্ধকৃত স্থানধারক ব্যবহার করে, সুতরাং এখন আছে:
f=deeply/nested/foo/bar.txt
f=deeply/nested/baz/fiz.txt
mkdir -p
পারি তবে আমাদের ফাইলের নামটি কেটে নেওয়া দরকার। ব্যবহার করে যথেষ্ট সহজ '${f%/*}'
:
mkdir -p deeply/nested/foo/
mkdir -p deeply/nested/baz/
f
তার সম্পূর্ণতার মধ্যে পরিবর্তনশীলটিকে পুনরায় উল্লেখ করি যখন আমরা touch
:
touch deeply/nested/foo/bar.txt
touch deeply/nested/baz/fiz.txt
cat files.txt | xargs -I {} sh -c 'f="{}" && mkdir -p -- "${f%/*}" && touch -- "$f"'
যা আছে তার জন্য আপনার এই সমস্ত ব্যাখ্যা রয়েছে, যার ইউ ইউওসি রয়েছে, আপনি তখন জার্গে সাবস্কেল হয়ে যা শেলের মধ্যে ফিরে আসে, যখন একটি while read
লুপ আরও বুদ্ধিমান হয়
while read f; do mkdir -p "$(dirname "$f")"; touch "$f"; done < files.txt
। আপনি যে ইউইউসি-র জন্য 10 সেকেন্ডের ইন্টারনেট অনুসন্ধান করতে পারবেন না তাও বলছে