ডিরেক্টরি ট্রি তৈরির জন্য স্বয়ংক্রিয় পদ্ধতি


11

আমি এ থেকে জেড ডিরেক্টরি ডিরেক্টরি করার চেষ্টা করছি যেখানে পরবর্তী ডিরেক্টরি বর্তমান ডিরেক্টরিতে রয়েছে।

উদাহরণস্বরূপ: বি A এর মধ্যে এবং গ এর মধ্যে বি এবং এর মধ্যে রয়েছে ..

-A
--B
---C
----...Z

এটি স্বয়ংক্রিয় পদ্ধতিতে কীভাবে সম্পন্ন করা যায় সে সম্পর্কে কোনও সূত্র?


আমি ভাবছি যে এই জাতীয় ডিরেক্টরিগুলির ব্যবহারিক উদ্দেশ্য কি। আইএমএইচও এটি কোড গল্ফের জন্য আরও প্রশ্নের মতো দেখাচ্ছে ।
মেলিবিয়াস

3
@ মেলিবিয়াস একটি সম্ভাব্য উদ্দেশ্য হ'ল ডিরেক্টরি কমান্ড হিসাবে ডিরেক্টরি কাঠামো তৈরি করা, যাতে অন্য কোনও কমান্ড, স্ক্রিপ্ট বা অ্যাপ্লিকেশন সম্পত্তি কাজ করে তা যাচাই করতে সহায়তা করে। এখানে একটি সাম্প্রতিক উদাহরণ রয়েছে যেখানে প্রশ্নটি নিজেই নির্দিষ্ট ডিরেক্টরি কাঠামো তৈরির বিষয়ে নয়, তবে কীভাবে আদেশগুলি লিখতে হয় তা জেনে রাখা কীভাবে নির্দিষ্ট কাঠামোটিকে কীভাবে অদৃশ্য ও অদ্ভুত বলা হয়েছিল তা নয়, বরং এটি পরীক্ষা করার উদ্দেশ্যে কার্যকর ছিল। (আমাদের কাছে নির্দিষ্ট ডিরেক্টরি কাঠামো তৈরি সম্পর্কে অনেক প্রশ্ন রয়েছে যা " mkdir -p" অনুসন্ধান করে পাওয়া যাবে can )
এলিয়াহ কাগন

উত্তর:


25

সহ mkdir, printfএবং বাশের ব্রেস সম্প্রসারণ:

$ mkdir -p "$(printf "%s/" {A..Z})"
$ tree A
A
└── B
    └── C
        └── D
            └── E
                └── F
                    └── G
                        └── H
                            └── I
                                └── J
                                    └── K
                                        └── L
                                            └── M
                                                └── N
                                                    └── O
                                                        └── P
                                                            └── Q
                                                                └── R
                                                                    └── S
                                                                        └── T
                                                                            └── U
                                                                                └── V
                                                                                    └── W
                                                                                        └── X
                                                                                            └── Y
                                                                                                └── Z

25 directories, 0 files
  • {A..Z}প্রসারিত হয় A B ... Z,
  • printf "%s/"/তাদের পরে আর্গুমেন্ট মুদ্রণ করে , তাই আমি পাইA/B/...Z/
  • এবং mkdir -pসৃষ্টি A/B/.../Zকোনো পিতা বা মাতা ডিরেক্টরি যে তৈরি প্রয়োজন সঙ্গে নির্দেশিকা।

তার জন্য ধন্যবাদ. ভেবেছিলাম আমি এই ত্রুটিটি পেয়েছি। আমি mkdir কমান্ডটি ব্যবহার করি: এ / বি / সি / ডি / ই / এফ / জি / এইচ / আই / জে / কে / এল / এম / এন / ও / পি / কিউ / আর / এস / টি / ইউ / ভি / ডাব্লু / এক্স / ওয়াই: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই
নিশ

3
@Nish একটা ব্যাপার -pমধ্যে mkdirকমান্ড।
মুড়ু

আমার খারাপ, আমি উবুন্টুর পরিবর্তে আমার ম্যাকটিতে চেষ্টা করেছি। এবং একটি ফলোআপ প্রশ্নটি হ'ল -> আসুন আমি বলি যে আমি A এর মধ্যে A1..A100 ডিরেক্টরি রাখতে চেয়েছিলাম (একই কাঠামোতে আটোজেড)। তারপরে বি 1..বি 100 এর মধ্যে বি। সুতরাং এটির মতো কিছু দেখাচ্ছে -> imgur.com/jfuKEdf
নিশ

11
আসুন আমরা মন্তব্যগুলির পরিবর্তে প্রকৃত প্রশ্ন হিসাবে একটি ফলোআপ পোস্ট করি এবং চিত্র ছাড়াও পাঠ্য ব্যবহার করিনি। এটা অনেক ভাল হবে, না?
মুড়ু

আমি এখানে আপনার বক্তব্য বুঝতে পারি। এটি কোনও কোড নয় এবং এটির একটি বিশালাস আউটপুট হিসাবে এটি পোস্ট করা কঠিন। সুতরাং সহজেই স্ক্রিনশটটি বোঝা সহজতর করে তোলে।
নিশ

7

খুব সাধারণ স্তরে, আপনি {A..Z}সমস্ত অক্ষর উত্পন্ন করতে প্রসারিত ব্যবহার করতে পারেন , তারপরে পুনরাবৃত্তভাবে প্রতিটি তৈরি এবং প্রবেশ করুন:

~/test_directory$ for d in {A..Z}; do mkdir "$d"; cd "$d"; done
~/test_directory/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z$ 

আপনি আমার প্রম্পট আউটপুটে দেখতে পাচ্ছেন, এখন আপনি সম্পূর্ণরূপে ডিরেক্টরিতে জড়িত ডিরেক্টরি।

তবে, যদি প্রকৃত ডিরেক্টরিগুলির নামগুলি কেবল বর্ণমালার চেয়ে আলাদা হয়, আপনাকে কোনওরকম ডিরেক্টরি নামের তালিকা প্রদান করতে হবে, সম্ভবত কোনও ফাইলের মাধ্যমে, যা আপনি পুনরাবৃত্তি করে আবার একই প্রক্রিয়াটি করেন do মূলত, এটি

while IFS= read -r dir_name;do mkdir "$dir_name"; cd "$dir_name" ;done < directory_list.txt

যে বেশ শান্ত. এখানে একটি ফলোআপ প্রশ্ন। ধরা যাক আমি A1..A100 ডিরেক্টরিটি A এর মধ্যে রাখতে চাই (একই কাঠামোতে আটোজেড)। তারপরে বি 1..বি 100 এর মধ্যে বি। সুতরাং এটির মতো কিছু দেখাচ্ছে -> imgur.com/jfuKEdf
নিশ

@Nish অই, যাতে একটি ভেতরের লুপ তাই প্রয়োজন চাইfor d in {A..Z}; do mkdir "$d"; cd "$d"; for i in {1..100}; do mkdir "${d}${i}" ;done ; done
Sergiy Kolodyazhnyy

বা এমনকি অভ্যন্তরীণ লুপ ব্যতীত,for d in {A..Z}; do mkdir "$d"; cd "$d"; mkdir "$d"{1..100}; done
সের্গেই কোলডিয়াজহনি

তার জন্য ধন্যবাদ. এটি কাজ করছে বলে মনে হচ্ছে তবে ডিরেক্টরিটির ক্রমটি স্ক্রুযুক্ত বলে মনে হচ্ছে 2 এ 1 এর পরে নয় Its এটি এলোমেলোভাবে সাজানো হয়েছে। যাইহোক যে ঠিক করতে? এখানে একটি স্ক্রিনশট রয়েছে -> imgur.com/a/Zqj1c
নিশ

@ নিশ বাছাইয়ের অর্ডারটি পাঠ্য-ভিত্তিক, আমি আশা করি এমনটি সংখ্যাগত নয়। যতদূর পর্যন্ত tree, আমি কীভাবে এটি ঠিক করব তা নিশ্চিত নই, তবে আমি মনে করি এটি সম্ভবত treeসমস্যা নাও হতে পারে , বরং শেলের সাজানোর ক্রম। আমি প্রকৃত প্রশ্ন যে সম্পর্কে পারেন এখানে বা ভাল unix.stackexchange.com এখনো জিজ্ঞাসা করার সুপারিশ করছি
Sergiy Kolodyazhnyy

2

যদিও muru এর printfপথ বিট, আমি ব্যক্তিগতভাবে মত হতে পারে না jotআর এই সাজানোর জন্য। jotউবুন্টুতে ডিফল্টরূপে ইনস্টল করা হয়নি। athena-jotপ্যাকেজ এটা প্রদান করে। এই আদেশগুলির মধ্যে যে কোনও একটিই কাজ করে:

mkdir -p "$(jot -s/ -c 26 A)"
jot -s/ -c 26 A | xargs mkdir -p

সত্যই যে কোনও কমান্ড অক্ষরের ক্রম তৈরি করে এবং তাদেরকে স্ল্যাশের সাথে যুক্ত করে এটি এটিকে সহজতর করবে, কারণ এর ফলাফলটি কমান্ড সাবস্টিটিউশন ( মুড়ুর উত্তর হিসাবে ) বা ব্যবহারের mkdir -pমাধ্যমে চলে যেতে পারে । কয়েকটি সরঞ্জাম ব্যবহার করে এখানে কয়েকটি উদাহরণ দেওয়া হয়েছে এবং সম্ভবত খুব কম ন্যূনতম সিস্টেম বা উবুন্টু কোর ব্যতীত আপনার সফ্টওয়্যার ইনস্টল করার দরকার নেই:xargsxargs

perl -we 'print join "/", A..Z' | xargs mkdir -p
ruby -we 'print (?A..?Z).to_a * ?/' | xargs mkdir -p
python3 -c 'print("/".join(__import__("string").ascii_uppercase))' | xargs mkdir -p

পুরাতন উবুন্টু রিলিজ পাইথন 3 এর পরিবর্তে পাইথন 2 নিয়ে আসে 3 তার জন্য, আপনি কেবলমাত্র পাইথনের সাথে এটি করতে python3চাইলে pythonশেষ কমান্ডটির কাজটি করে নিন।

একইভাবে, মুড়ুর সংক্ষিপ্ত এবং সহজ উপায় বিকল্পভাবে লেখা যেতে পারে:

printf '%s/' {A..Z} | xargs mkdir -p

চিহ্ন /, ডিরেক্টরিতে পাথ mkdir -pতৈরি করতে বলা হয়, কোন সমস্যা নেই এবং তর্কসাপেক্ষ শৈলীগত বাঞ্ছনীয়। তবে এটি উত্তোলন করা ঠিক আছে, যেমন এই উত্তরের অন্যান্য উদাহরণগুলি করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.