सवाल मैं बार-बार काम कैसे कर सकता हूं?


मुझे एक निर्देशिका मिली है pdfs जिसमें उप- और उप-उप-निर्देशिकाओं का एक गुच्छा शामिल है। मैं सभी सबफ़ोल्डर में सभी पीडीएफ फाइलों पर स्वामित्व बदलना चाहता हूं। मैंने बस कोशिश की:

chown -R someuser:somegroup *.pdf

... लेकिन यह उपनिर्देशिका में पीडीएफ के स्वामित्व को नहीं बदला। उपयोगकर्ता और समूह मौजूद हैं।

के लिए मैन पेज के अनुसार chown, द -R रिकर्सिव का मतलब होना चाहिए:

-R, --recursive
          operate on files and directories recursively

मैं क्या खो रहा हूँ?


234
2018-03-22 16:29


मूल




जवाब:


रिकर्सिव मोड केवल निर्देशिकाओं पर काम करता है, फाइल नहीं। ग्लोब '* .pdf' का उपयोग करके खोल खोलने के लिए फ़ाइल सूची को पास कर रहा है, जो ये देखता है कि ये फ़ाइलें हैं, और फ़ाइलों को देखने पर अनुमतियां बदलती हैं, और यही वह है।

याद रखें, गोले में, ग्लोब का मूल्यांकन शेल द्वारा किया जाता है, कमांड नहीं। यदि ग्लोब फाइलों से मेल खाता है, तो वे कमांड को पास कर दिए जाते हैं और कमांड कभी भी ग्लोब मौजूद नहीं जानता है। (यह विंडोज कमांड प्रॉम्प्ट चीजों को करने के लिए कैसे उपयोग किया जाता है) से अलग है। यदि आपके पास एक डीआईआर है, तो सामग्री के साथ कुछ ऐसा:

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

देखें, पर कार्य करने के लिए आरआर के लिए कोई निर्देशिका नहीं है। यह वही करता है जो आपने पूछा - कमांड लाइन पर दो फाइलों पर स्वामित्व बदलें, उस quirky -R ध्वज को अनदेखा कर रहा है।

इस निर्देशिका और उपनिर्देशिका के लिए पैटर्न के रूप में '* .pdf' का उपयोग करने के लिए आप जो भी चाहते हैं, उसका उपयोग करने के लिए, आप इसका उपयोग कर सकते हैं find, जो फाइलेंम पैटर्न (या कई अन्य क्रिट्रिया) से मेल खाने वाली फाइलें पा सकते हैं और उप-आदेश में पास हो सकते हैं

find . -type f -name '*.pdf' | xargs chown someuser:somegroup

यह वर्तमान dir 'में शुरू होता है।' नाम पैटर्न के फाइलों (फ़ाइल प्रकार एफ) के लिए देखने के लिए '*.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

242
2018-03-22 16:47



प्रतिबिंबित करने के लिए संपादित किया गया है कि 4 के साथ bash shopt -s globstar रिकर्सिव ग्लोबिंग करता है। - kojiro
@kojiro धन्यवाद! जैसा कि आप बता सकते हैं कि मैं अभी भी bash3 का उपयोग करता हूं - Rich Homolka
मूल पोस्टर द्वारा दिखाए गए मैन पेज के अनुसार, मैंने पाया कि chown -R वास्तव में फ़ोल्डर और फ़ाइलों पर मालिक बदल गया था। खोजने के लिए कोई ज़रूरत नहीं है। मिंट 15 का उपयोग करना। - gwideman
@gwideman मुझे पता है कि यह पुराना है ... लेकिन हाँ, ज़ाहिर है- आर रिकर्सिव है। ओपी को बस एक बहुत ही विशिष्ट प्रकार के रिकर्सन के साथ एक मुद्दा था, एक एक्सटेंशन और "फ़ाइल प्रकार फ़ाइल है" फ़िल्टर किया गया - Rich Homolka
@RichHomolka आह। ओपी ने कहा कि फाइलें 'पीडीएफएस' नामक निर्देशिका में थीं, इसलिए मुझे लगता है कि पीडीएफ को निर्देशिका के रूप में निर्दिष्ट करने के तरीके में समस्या थी, और सभी निहित फाइलें पीडीएफ थीं, इसलिए उन्हें विशेष रूप से चुनने की आवश्यकता नहीं है। लेकिन आप सही हो सकते हैं, अगर नौकरी केवल पीडीएफ फाइलों का चयन करना है, और दूसरों को अपरिवर्तित छोड़ दें। - gwideman


यह जटिल नहीं है।

chown -R someuser:somegroup /your/folder/here/*

यह निर्दिष्ट फ़ाइलों के सभी फाइलों और सभी उपनिर्देशिकाओं और उप-उपनिर्देशिकाओं को दिखाया जाएगा। देखभाल के साथ प्रयोग करें।


33
2017-11-09 11:44



स्पष्ट रूप से कोई 4 साल से इसका उत्तर देता है, लेकिन चेतावनी के लिए ty। - Francisco Tapia
यह प्रश्न वर्तमान में Google पर # 1 है, इसलिए सही उत्तर को ध्यान में रखना महत्वपूर्ण है। - Sprachprofi
निश्चित रूप से, स्वीकार्य एक अधिक सुरुचिपूर्ण, पठनीय और पूर्ण है - Francisco Tapia
जैसे तैसे sudo chown -R user ./ मेरे लिए काम किया, लेकिन sudo chown -R user ./* नहीं था - Slav
मुझे पता है कि यह पुराना है, लेकिन हालांकि यह शीर्षक का जवाब देता है, सवाल का जवाब नहीं देता है। यह वास्तव में ओपी की कोशिश की तुलना में थोड़ा बदतर है। - Rich Homolka


आप इसका उपयोग कर सकते हैं find उपयोगिता:

find . -name '*.pdf' -exec chown someuser:somegroup {} +

कृपया उद्धरण चिह्नों को न भूलें *.pdf। अन्यथा खोल इसे विस्तारित करने का प्रयास करेगा। इसका मतलब है कि पहले ही खोल बदल जाएगा *.pdf वर्तमान निर्देशिका में पाए गए सभी पीडीएफ फाइलों के नाम के साथ। लेकिन यह वही नहीं है जो आप चाहते हैं। आप उपनिर्देशिका में स्थित पीडीएफ फाइलों को ढूंढना चाहते हैं। बीटीडब्ल्यू .: यह भी आपके साथ समस्या है chown आदेश।


14
2018-03-22 16:37



मुझे देखना था +प्रदर्शन के लिए साफ चाल। -exec command {} + -Exec कार्रवाई का यह संस्करण चयनित फ़ाइलों पर निर्दिष्ट कमांड चलाता है, लेकिन कमांड लाइन अंत में प्रत्येक चयनित फ़ाइल नाम को जोड़कर बनाई जाती है; कमांड के इनवोकेशन की कुल संख्या मिलान की गई फ़ाइलों की संख्या से बहुत कम होगी। कमांड लाइन उसी तरह से बनाई गई है xargs इसकी कमांड लाइन बनाता है। का केवल एक उदाहरण {} आदेश के भीतर अनुमति है। आदेश प्रारंभ निर्देशिका में निष्पादित किया जाता है। - Patrick M
@ पैट्रिकम एक (मामूली) अन्य लाभ + बनाम; .... प्लस एक शैल मेटा चरित्र नहीं है और इसे बचने की ज़रूरत नहीं है - Rich Homolka


आदेश

chown -R someuser:somegroup *.pdf

अगर निर्देशिका में केवल रिकर्स करेगा निर्देशिका नाम .pdf में समाप्त होता है। आपको कुछ चाहिए:

find . -name "*.pdf" -exec chown someuser:somegroup {} \;

6
2018-03-22 16:38



तकनीकी रूप से यह केवल एक स्तर पर जाएगा। चाहे आप उस वास्तविक रिकर्सन को कॉल करें या नहीं, उपयोगकर्ता के लिए एक अभ्यास है :) - Rich Homolka


एक निर्देशिका के स्वामित्व को फिर से बदलने के लिए बस उपयोग करें:

sudo chown -R <username>:<groupname> <dir name>

यहां उपयोगकर्ता नाम = नया उपयोगकर्ता जो निर्देशिका का स्वामी होना चाहिए

groupname = नया समूह जो निर्देशिका का स्वामी होना चाहिए

प्रत्येक फ़ाइल / निर्देशिका में उपयोगकर्ता स्वामी और समूह स्वामी होता है


0
2018-05-11 01:38



यह ओपी से क्या नहीं करता है। यह सब कुछ का स्वामित्व बदलता है, ओपी ने फाइलों के एक विशिष्ट सेट के लिए कहा। - Rich Homolka


मैं उपयोग करता हूं tree बजाय:

 sudo tree -fai ~/.blabla  | xargs -L1 -I{} sudo chown youruser:youruser {}

'/' निर्देशिका या अन्य सिस्टम निर्देशिका पर रिकर्सिव चाउन या chmod चलाने के लिए भी ख्याल रखना।


0
2018-01-25 13:36