আপনার কমান্ডটি প্রথমে শেল দ্বারা দুটি কমান্ডকে a দ্বারা বিভক্ত করা হয়েছে ;
যা একটি নতুন লাইনের সমতুল্য:
find . -name "*" -exec chgrp -v new_group {}
chmod -v 770 {} \;
আপনি যদি শেল কমান্ডটি চালাতে চান তবে একটি শেলটি স্পষ্টভাবে অনুরোধ করুন bash -c
(অথবা sh -c
যদি আপনি শেলটি বিশেষভাবে ব্যাশ করে না তবে):
find . -name "*" -exec sh -c 'chgrp -v new_group "$0"; chmod -v 770 "$0"' {} \;
{}
শেলের আর্গুমেন্ট হিসাবে ব্যবহারটি নোট করুন ; এটি জিরোথ আর্গুমেন্ট (যা সাধারণত শেল বা স্ক্রিপ্টের নাম, তবে এখানে এখানে কিছু আসে যায় না), তাই হিসাবে উল্লেখ করা হয় "$0"
।
আপনি একবারে শেলটিতে একাধিক ফাইলের নামগুলি পাস করতে পারেন এবং সেগুলির মাধ্যমে শেলটি পুনরাবৃত্তি করতে পারেন, এটি আরও দ্রুত হবে। এখানে আমি _
স্ক্রিপ্টের নাম হিসাবে পাস করি এবং নিম্নলিখিত আর্গুমেন্টগুলি ফাইলের নাম, যা for x
(এর জন্য একটি শর্টকাট for x in "$@"
) পুনরাবৃত্তি হয়।
find . -name "*" -exec sh -c 'for x; do chgrp -v new_group "$x"; chmod -v 770 "$x"; done' _ {} +
নোট করুন যে বাশ 4, বা zsh এ, আপনার এখানে কোনও সন্ধানের দরকার নেই। বাশে, একটি পুনরাবৃত্ত ডিরেক্টরি গ্লোব জন্য স্থায়ী সক্রিয় করতে চালান shopt -s globstar
(এটি আপনার রাখুন ~/.bashrc
) **/
। (Zsh এ, এটি সর্বদা সক্রিয় থাকে)) তারপরে
chgrp -v new_group -- **/*; chmod -v 770 -- **/*
অথবা আপনি যদি চান ফাইলগুলি ক্রমে পুনরাবৃত্তি করা হোক
for x in **/*; do
chgrp -v new_group -- "$x"
chmod -v 770 -- "$x"
done
find
কমান্ডের সাথে একটি পার্থক্য হ'ল শেলটি ডট ফাইলগুলিকে উপেক্ষা করে (ফাইলগুলির নাম যার সাথে শুরু হয় a .
)। এগুলি অন্তর্ভুক্ত করতে, ব্যাশে, প্রথম সেট GLOBIGNORE=.:..
; zsh এ, গ্লোব **/*(D)
প্যাটার্ন হিসাবে ব্যবহার করুন ।
'{}'
(ধনুর্বন্ধনীগুলির চারপাশে অ্যাস্ট্রোফেস