উত্তর:
F1 এর ঠিক উপরে ডিরেক্টরি থেকে এই স্ক্রিপ্টটি চালান:
স্ক্রিপ্টের উদ্দেশ্য হ'ল ফটো ডিরেক্টরিগুলির অধীনে অপ্রয়োজনীয় ফটো ডিরেক্টরি তৈরি করা এড়ানো।
এছাড়াও এটি ব্যবহারকারীর মূল ডিরেক্টরি হিসাবে কোনও ভুল জায়গা থেকে এটি দুর্ঘটনাক্রমে চালানো থেকে বিরত রাখার জন্য নকশা করা হয়েছে, যেখানে এটি F1ডিরেক্টরিটি দেখতে পাবে না এবং ভুলভাবে ভুল প্রাসাদে শত শত ফটো ডিরেক্টরি তৈরি করবে।
এছাড়াও, স্ক্রিপ্টটি অনুসরণ করা সহজ করা আমার উদ্দেশ্য ছিল যাতে ব্যবহারকারী এটি কাস্টমাইজ করতে পারে।
#!/bin/bash
while IFS= read -r -d '' i;
do
if [[ ! -d $i/Photo ]]; then
# Filter to skip folders named Photo
thisfolder="$(echo $i | sed "s/.*\///")"
if [[ ! $thisfolder == "Photo" ]]; then
mkdir "$i/Photo"
fi
fi
done < <(find F1 -type d -print0)
স্ক্রিপ্ট আপডেট হয়েছে:
pএ বদলেছে photo।lsপার্স করা হয়নি। এটি কেবল ব্যবহারকারীর প্রতিক্রিয়া ... যা ঘটছে তা দেখাচ্ছে। "এটি একটি ফটো ডিরেক্টরি" শব্দের মতোই। এটি সেখানে ডিরেক্টরি কেন তৈরি করছে না তা এটি ব্যবহারকারীকে জানিয়ে দিচ্ছে।
find -type d F1, হতে পারে?
$i/Photoতবে এটি ব্যর্থ হবে তবে ওপিতে এই জাতীয় ক্ষেত্রে কী করা উচিত তা নির্দিষ্ট করে নেই। এটি, স্বীকারযোগ্যভাবে অসম্ভব ক্ষেত্রেও ব্যর্থ হবে, যেখানে এর একটিতে $iএকটি নিউলাইন রয়েছে।
আপনি একটি একক findকল ব্যবহার করে এটি অর্জন করতে পারেন ।
find . -name 'Photo' -prune -o -type d -exec mkdir {}/Photo \;
অংশটি -name 'Photo' -prune -oবিদ্যমান (এবং নতুন নির্মিত) Photoডিরেক্টরিগুলিতে পুনরাবৃত্তি না করতে বলে : যদি পাওয়া ফাইলের (বা ডিরেক্টরি) নাম থাকে তবে Photoএটি প্রক্রিয়া বন্ধ করুন ( -prune)। অন্য ক্ষেত্রে ( -o) ডিরেক্টরিগুলি ( -type d) চালিয়ে যান এবং ( -exec) কমান্ডটি কার্যকর করুন।
-prune? :) হ্যাঁ, এটি বেশ পাল্টা স্বজ্ঞাত তবে শেখার পক্ষে মূল্যবান।
-type dএকসাথে নির্দিষ্ট করে এটি পরিবর্তন করতে পারেন । -name 'Photo'-prune
findঅন্যান্য ফোল্ডারগুলি (সেই ফোল্ডারের সাবফোল্ডার সহ, যদি আপনি এটি জিজ্ঞাসা করছেন) দিয়ে চালিয়ে যাবেন।
আপনি যদি ফাইলের নামগুলি ফাঁকা রাখতে চান তবে এটির পরিবর্তে findফলাফলগুলি পাস করতে পারতেনwhilefor
প্রথমে ডিরেক্টরিতে সিডি করুন F1, তারপরে করুন:
find -type d | while read dir ; do mkdir "$dir"/Photo ; done
ডিরেক্টরি উপস্থিত থাকলে mkdirকেবল এটি তৈরি করতে অস্বীকার করবে, সুতরাং সেখানে কোনও সমস্যা নেই ...
যদি আপনার ডিরেক্টরিটির নামগুলিতে নিউলাইনগুলি বা অন্য বিদেশী অদ্ভুততা থাকতে পারে তবে এটি ব্যবহার করুন যা স্বেচ্ছাসেবী নামের সাথে ডিল করতে পারে:
find -type d -print0 | while IFS= read -r -d '' dir ; do mkdir "$dir"/Photo ; done
এই সাহায্যের জন্য @terdon ধন্যবাদ :)
F1ডিরেক্টরিটি থাকে ~user/Picturesতবে প্যারেন্ট ডিরেক্টরিতে চলে যাওয়া এবং লাইনটি চালানো Photoতার স্থানের প্রতিটি ডিরেক্টরিতে একটি ডিরেক্টরি রাখবে যা হাজার হাজার হতে পারে। F1সহজে করা ভুল এড়াতে কম্যানলাইন অংশ হিসাবে যুক্ত বিবেচনা করুন । যদি অজ্ঞাতসারে এটি ভুল জায়গা থেকে চালিত হয় তবে এটি ডিরেক্টরি তৈরি করে না।
F1পরিবর্তে এটি সম্পাদন করার পরামর্শ দিচ্ছি , @ এলডিজেমস সম্পাদিত
পাইথন সহ os.walkএটিকে মোটামুটি সহজে এবং কেবল কয়েকটি লাইনের কোডে করতে পারে
$ mkdir dir_one dir_two
$ mkdir dir_two/dir_three
$ python -c 'import os;[os.mkdir(r + "/Pictures") for r,d,f in os.walk(".")]'
$ tree
.
├── dir_one
│ └── Pictures
├── dir_two
│ ├── dir_three
│ │ └── Pictures
│ └── Pictures
└── Pictures
আমরা যে কমান্ডটি নিয়ে কাজ করছি তা হ'ল অজগর-সি 'আমদানি ওএস; [ওএস.এমকেডির (r + "/ ছবি") r, d, f এর জন্য ওএসওয়াক ("।")]' '
এখানে আমরা কেবলমাত্র -cএকক উদ্ধৃতিতে প্রদত্ত আদেশটি নির্দিষ্ট করতে পতাকা সহ পাইথন ইন্টারপ্রেটারকে কল করি। os.walk()ফাংশন আমাদের সমস্ত উপ-ডিরেক্টরিতে পুনরাবৃত্তভাবে পদক্ষেপ করতে দেয় এবং প্রতিটি উপ-ডিরেক্টরিতে (প্রতিনিধিত্ব করে r) জন্য আমরা os.mkdir()ফাংশনের মাধ্যমে পিকচার ফোল্ডার তৈরি করি । r+"/Pictures"সাব-ডাইরেক্টরি স্ট্রিং এবং "/ পিকচারস" স্ট্রিংয়ের সাথে একত্রে যোগ করার জন্য কেবল একটি সরল স্ট্রিং ম্যানিপুলেশন
আপনার প্রয়োজনীয়তা মাপসই "/ ফটো" দিয়ে "/ চিত্রগুলি" প্রতিস্থাপন করুন
আপনি যদি ব্যাশ ব্যবহার করছেন তবে আপনি কেবল চালাতে পারবেন:
shopt -s globstar
for d in **/; do mkdir -p "$d"/Photo; done
globstarবিকল্প তোলে **মেলে "সব ফাইল এবং 0 বা আরো ডিরেক্টরি এবং সাবডিরেক্টরি"। অন্য কথায়, এটি পুনরাবৃত্তির সাথে সমস্ত কিছু মেলে। কারণ /শেষে **/সব ডিরেক্টরি এবং সাবডিরেক্টরি (কোন ফাইল) ম্যাচ হবে। সুতরাং, $dবর্তমান বর্তমান ডিরেক্টরি এবং তাদের উপ-ডিরেক্টরিগুলির সমস্ত ডিরেক্টরিতে পুনরাবৃত্তি করবে এবং তাদের Photosপ্রত্যেকটিতে ডিরেক্টরি তৈরি করা হবে।
-pপতাকা mkdirমাধ্যম:
-p, --parents
no error if existing, make parent directories as needed
এখানে, আমি লক্ষ্য ডিরেক্টরিটি ইতিমধ্যে উপস্থিত থাকলে ত্রুটি বার্তাগুলি দমন করতে এটি ব্যবহার করছি। আপনি যদি ত্রুটিগুলি দেখতে চান তবে এটি সরান।
নোট করুন যে এটি Photoকোনও লক্ষ্য ডিরেক্টরিতে একটি সাবডিরেক্টরি তৈরি করতে ব্যর্থ হবে যাতে ফটো নামক একটি ফাইল রয়েছে । এই ক্ষেত্রে কী করা উচিত তা আপনি নির্দিষ্ট করেননি যদিও এখনও অবধি পোস্ট করা সমস্ত উত্তরগুলিরও এই সীমাবদ্ধতা রয়েছে।