উত্তর:
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
ফলাফলগুলি পাস করতে পারতেনwhile
for
প্রথমে ডিরেক্টরিতে সিডি করুন 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
কোনও লক্ষ্য ডিরেক্টরিতে একটি সাবডিরেক্টরি তৈরি করতে ব্যর্থ হবে যাতে ফটো নামক একটি ফাইল রয়েছে । এই ক্ষেত্রে কী করা উচিত তা আপনি নির্দিষ্ট করেননি যদিও এখনও অবধি পোস্ট করা সমস্ত উত্তরগুলিরও এই সীমাবদ্ধতা রয়েছে।