पुनरावर्ती मोड केवल निर्देशिकाओं पर काम करता है, फाइलों पर नहीं। ग्लोब * * .pdf 'का उपयोग करके शेल फाइल लिस्ट को चांस करने के लिए पास कर रहा है, जो देखता है कि ये फाइल हैं, और यह जो फाइल देखता है उस पर अनुमतियों को बदलता है, और यही है।
याद रखें, गोले में, गोला का मूल्यांकन शेल द्वारा किया जाता है, कमांड से नहीं। यदि ग्लोब फ़ाइलों से मेल खाता है, तो वे कमांड को पास किए जाते हैं और कमांड को कभी पता नहीं चलता कि एक ग्लोब मौजूद है। (यह विंडोज कमांड प्रॉम्प्ट चीजों को करने के तरीके से अलग है)। यदि आपके पास एक dir है, तो सामग्री कुछ इस तरह है:
machine:$ ls -F
file1.pdf file2.pdf other.txt subdir/
और आपने टाइप किया:
chown -R someuser:somegroup *.pdf
शेल पहले सूची बनाएगा: file1.pdf file2.pdf
और फिर अपना कमांड चलाएं:
chown -R someuser:somegroup file1.pdf file2.pdf
देखें, -R पर कार्य करने के लिए कोई निर्देशिका नहीं है। यह वही करता है जो आपने इसे कहा था - कमांड लाइन पर दो फाइलों पर स्वामित्व को बदलना, उस विचित्र-आर ध्वज को अनदेखा करना।
इस निर्देशिका और उपनिर्देशिकाओं के लिए एक पैटर्न के रूप में '* .pdf' का उपयोग करने के लिए, आप जो चाहते हैं, वह करने के लिए find
, जो फाइल फ़ाइल पैटर्न (या कई अन्य मानदंड) से मेल खाती है और एक उप-पृष्ठ पर जा सकते हैं
find . -type f -name '*.pdf' | xargs chown someuser:somegroup
यह वर्तमान डायर में शुरू होता है '।' नाम पैटर्न की फ़ाइलों (फ़िलाटाइप f) को देखने के लिए '*.pdf'
फिर xargs में जाता है, जो कि chmod को कमांड लाइन बनाता है। पैटर्न के आसपास के उद्धरणों को ध्यान से देखें '*.pdf'
, याद रखें कि शेल एक ग्लोब बनाएगा यदि यह हो सकता है, लेकिन आप चाहते हैं कि पैटर्न पास हो find
जाए, इसलिए आपको इसे उद्धृत करने की आवश्यकता है।
क्योंकि फ़ाइल नाम में स्थान हो सकते हैं, आप इसे फ़ाइल नाम के साथ रिक्त स्थान को सुरक्षित बनाने के लिए एक चाल का उपयोग करना चाहते हैं:
find . -type f -name '*.pdf' -print0 | xargs -0 chown someuser:somegroup
बैश 3 और लोअर में, यह वह तरीका है जिसे आपको करने की आवश्यकता है। अधिक शक्तिशाली ग्लोबिंग बैश 4 (साथ shopt -s globstar
) और अन्य गोले में उपलब्ध है। एक पुनरावर्ती ग्लोब का उपयोग करते हुए zsh में समान **
:
chown -R someuser:somegroup ./**/*.pdf
shopt -s globstar
पुनरावर्ती ग्लोबिंग करता है।