चामॉड कमांड का चयन करें


11

मैं सभी फ़ाइलों और उप-निर्देशिकाओं पर एक विशिष्ट निर्देशिका के तहत 755 अनुमति सेट करना चाहता हूं, लेकिन मैं केवल उन घटकों के लिए 755 chmod निष्पादित करना चाहता हूं जिनके पास 755 अनुमति नहीं है।

find /main_directory/ -exec chmod 755 {} \;

यदि findकमांड लंबी सूची देता है, तो इसमें बहुत समय लगेगा। मुझे पता है कि मैं प्रत्येक घटक के ऑक्टल फ़ाइल स्तर की अनुमति की जांच करने के लिए स्टेट कमांड का उपयोग कर सकता हूं और फिर फ़ाइल अनुमति को चालू करने के लिए अगर-और का उपयोग कर सकता हूं, लेकिन क्या किसी एकल लाइन दृष्टिकोण का उपयोग कर रहा है findऔर xargsपहले यह जांचने के लिए कि फ़ाइल / निर्देशिका की क्या अनुमति है , और फिर chmodइसे 755 में बदलने के लिए उपयोग करें यदि यह किसी और चीज़ के लिए सेट है।


6
यह समय से पहले का अनुकूलन हो सकता है, और यह तेजी से भी नहीं हो सकता है। उन सभी जाँचों को करने से यह धीमा हो सकता है। यह सुनिश्चित करने के लिए परीक्षण करना कि यह तेज़ है, केवल भुगतान करना होगा, अगर आपको यह करना है।
ctrl-alt-delor-

3
आप शायद सभी फ़ाइलों को निष्पादित करने की अनुमति नहीं देना चाहते हैं। यह एक सुरक्षा जोखिम पैदा करेगा। (यह माइक्रोसॉफ्ट के विंडोज पर वायरस वैक्टर में से एक है: सब कुछ निष्पादन योग्य है)। प्रतीकात्मक मोड में आप कह सकते हैं u+rw,go+r,go-w,ugo+X- पूंजी पर ध्यान दें।
ctrl-alt-delor

मैं @ ctrl-alt-delor से सहमत हूं, लेकिन जो आपने पूछा, यू = rwX, go = rX के करीब कुछ सुझाएगा जो एक ही चीज को प्राप्त करना चाहिए।
पेंग्विन 359

जवाबों:


21

यदि आप 755फ़ाइलों और निर्देशिकाओं दोनों पर अनुमतियाँ बदलना चाहते हैं , तो उपयोग करने का कोई वास्तविक लाभ नहीं है find(प्रदर्शन के दृष्टिकोण से कम से कम), और आप बस कर सकते हैं

chmod -R 755 /main_directory

यदि आप वास्तव में findउन चीजों पर अनुमतियों को बदलने से बचने के लिए उपयोग करना चाहते हैं, जिनके पास पहले से ही 755अनुमति है (उनके टाइमस्टैम्प को अपडेट करने से बचने के लिए), तो आपको प्रत्येक निर्देशिका और फ़ाइल पर वर्तमान अनुमतियों के लिए भी परीक्षण करना चाहिए:

find /main_directory ! -perm 0755 -exec chmod 755 {} +

-exec ... {} +कि गुजरता है संभव के रूप में कई pathnames के रूप में एकत्रित करेगा ! -perm 0755परीक्षण, और निष्पादित chmodएक बार में उन सभी को पर।

आमतौर पर, कोई फ़ाइलों और निर्देशिकाओं की अनुमतियों को अलग-अलग बदलना चाहेगा, ताकि सभी फाइलें निष्पादन योग्य न हों:

find /main_directory   -type d ! -perm 0755 -exec chmod 755 {} +
find /main_directory ! -type d ! -perm 0644 -exec chmod 644 {} +

आकर्षण की तरह काम किया, धन्यवाद। सादर, कुमारजीत
कुमारजीत घोष

1
मैं का उपयोग कर संदेह +के बजाय ;एक बड़ा अंतर यहाँ बनाता है।
केविन

यह त्वरित तरीका है - एक जांच से बचें। मैं आगे केवल उन फ़ाइलों की एक सूची बनाने के लिए खोज का उपयोग करूंगा जिनके लिए आपको इसे बदलने की अनुमति है, यह उन फ़ाइलों पर chmod त्रुटि-आईएनजी से बचें जो इसे बदल नहीं सकती हैं। <pre> <code> # rwx, rw, wx, w ही पाते हैं। -user $ (whoami) -perm / 002! -perm 0755 -exec chmod 0755 {} \; # दो ऑपरेशंस में ब्रेक। -user $ (whoami) -perm / 002! -perm 0755> /tmp/chfiles.txt $ में फ़ाइल के लिए (</ tmp / chfiles.txt) do chmod --quiet 0755 "$ {फ़ाइल}" किया </ code> </ pre>
क्रिस रीड

@ChrisReid ध्यान दें कि अगर किसी भी मार्गनाम में व्हॉट्सएप अक्षर है, तो उस तरह के मार्ग की सूची पर लूपिंग टूट जाएगी।
Kusalananda

मुझे लगता है कि आपको एक स्क्रिप्ट में आंतरिक क्षेत्र विभाजक (IFS) को '\ n' में बदलने की आवश्यकता है। ये पर्यावरण सेटिंग्स हैं, जिस तरह से शेल व्याख्या करता है वह उन सेटिंग्स के मूल्यों पर निर्भर है। मैं फ़ाइलों का नाम बदलने या उन्हें अधिलेखित करने जैसी धमाकेदार आपदाओं को दूर करने के लिए डमी फ़ाइलों पर स्क्रिप्ट का परीक्षण करता हूं। मुझे IFS सेट करने का शेल प्रिंटफ़ तरीका पसंद है। IFS = $ (printf "\ n") # बहुत पठनीय
क्रिस रीड

1

जैसा कि आपने सिंटैक्स findप्राप्त किया -exec ... +है, उपयोग करने में बहुत अधिक बात नहीं है xargs, लेकिन जैसा कि आप इसके लिए पूछते हैं:

find /main_directory -not -perm 0755 | xargs chmod 755

1
यह भी ध्यान दें कि बिना xargs -0( -print0खोजने के साथ संयोजन में; जो कि GNU एक्सटेंशन है) काफी समस्याग्रस्त सुरक्षा-वार हो सकता है यदि संभावित हमलावर फाइलनाम बना सकते हैं जिसमें व्हाट्सएप या उनमें अन्य विशेष वर्ण शामिल हैं। -execजब आप कर सकते हैं तो बेहतर छड़ी
मतिजा नालिस

xargs(सिर्फ उपयोग -exec) के लिए कोई ज़रूरत नहीं है , और यदि आप इसका उपयोग करते हैं तो आपको उपयोग करना चाहिए -print0/ -0जैसे कि मतिजा कहते हैं।
केविन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.