पुनरावर्ती chmod: फ़ाइलों के लिए rw, निर्देशिकाओं के लिए rwx


28

मैं chmodबहुत सारी फाइलें और निर्देशिकाएं चाहता हूं । के रूप में xनिर्देशिकाओं के लिए सूची को इंगित करता है और मैं लागू करना चाहते हैं नियमित रूप से फ़ाइलों के लिए निष्पादित rwफ़ाइलों के लिए और rwxनिर्देशिका के लिए। क्या केवल chmodआदेश का उपयोग करना संभव है ?

यदि यह नहीं है, तो सबसे सुविधाजनक तरीका क्या है?

ऐसा करना एक chmod -R 770संभावना नहीं है क्योंकि मैं नहीं चाहता कि नियमित फाइलें निष्पादन योग्य बनें।


1
क्या आप वास्तव में फाइलों और निर्देशिकाओं पर सार्वजनिक अनुमति चाहते हैं? इसका मतलब है कि आपको परवाह नहीं है कि कौन किसी भी फाइल को देखता है?
जोनाथन लेफ़लर

सच। मैंने उसे ऊपर से बदल दिया।
नष्ट कर दिया

जवाबों:


19

मैं इस अवसर पर एक ही findआदेश का उपयोग कर रहा हूँ । बदसूरत लेकिन प्रभावी।

find /p/a/t/h \( -type d -exec chmod 755 {} \; \) -o \( -type f -exec chmod 644 {} \; \)

क्या "{}" को उद्धृत करने की आवश्यकता नहीं है, बस मामले में पथ रिक्त स्थान रखते हैं? जैसे find . -type d -exec chmod -vc 755 "{}" \;( -vcकुछ प्रतिक्रिया के लिए)। (और हो सकता है, केवल स्पष्ट करने के लिए, दो स्टैंडअलोन कमांड को उत्तर के रूप में अच्छी तरह से जोड़ दें?)
अर्जन

नहीं, {} को उद्धृत करने की आवश्यकता नहीं है (मैं अभी बिल्कुल निश्चित होने के लिए परीक्षण किया गया है)। जब आवेषण {} कमांड में मिलते हैं, तो यह ठीक से बच जाता है। मैंने खोज के आंतरिक कामकाज को नहीं देखा है, लेकिन मैं यह मानूंगा कि यह निष्पादन के लिए पारित करने के लिए एक तर्क सरणी बनाता है (), और यह सरणी में फ़ाइल नाम () को सम्‍मिलित करेगा। जब चामोड अपने तर्कों को देखता है, तो यह ठीक से दिखाई देगा।
बॉमगार्ट

37

मैन पेज से, X अनुमति का उपयोग करें:

निष्पादन / खोज बिट्स यदि फ़ाइल एक निर्देशिका है या निष्पादन / खोज बिट्स मूल (अनमॉडिफाइड) मोड में सेट की गई हैं। परमिट प्रतीक "X" के साथ संचालन केवल op प्रतीक "+" के साथ संयोजन में सार्थक है, और अन्य सभी मामलों में अनदेखा किया जाता है।

तो निम्न कार्य करें:

chmod -R a-x [directory]
chmod -R a+rwX [directory]

यह सभी फ़ाइलों और निर्देशिकाओं से निष्पादित बिट को हटा देता है और इसके बाद सब कुछ पढ़ने और लिखने के लिए विशेषाधिकार जोड़ देता है, और केवल निर्देशिकाओं पर विशेषाधिकार निष्पादित करता है। (कोई भी नियमित फ़ाइल पहले चरण से अब तक निष्पादित नहीं होती है।)


1
यह नियमित फ़ाइलों पर मोड 666 को बाध्य नहीं करेगा। यह नियमित फ़ाइलों के लिए निष्पादन योग्य बिट को स्पष्ट नहीं करता है यदि उनके पास पहले से ही सेट है।
क्वैक

उस मामले में तो तुम कर सकते हो chmod -R a-x [directory]के बाद chmod -R a+rwX [directory]?
जावदेलल

@ जजवदेल: वह काम करना चाहिए। आप फ़ाइल / निर्देशिका प्रकार की परवाह किए बिना सभी निष्पादन बिट्स को निकाल रहे हैं, फिर केवल निर्देशिकाओं और नियमित फ़ाइलों को निष्पादित करें जो पहले से ही निष्पादित बिट पर हैं (जो अब कोई नहीं है)
बेन एस

एक बार जब मैं करता हूं a-x, तो निर्देशिका सुलभ नहीं है। वास्तव में, chmod अनुमति से इनकार करता है और निर्देशिका के भीतर फाइलों से निष्पादन योग्य बिट को नहीं हटाएगा। क्या जड़ होने के बिना ऐसा करने का कोई तरीका है?
अवकर

14

आप findइसके साथ भी उपयोग कर सकते हैं xargs:

find . -type f -print0 | xargs -0 chmod 666
find . -type d -print0 | xargs -0 chmod 777

जहाँ डी irectory या f ile -typeनिर्दिष्ट करता है ।


1
Xargs की लंबाई सीमा नहीं है? यह फ़ाइलों और निर्देशिकाओं का एक बहुत है।
नष्ट कर दिया

2
मैं पहले डायरेक्टरी करता, फिर फाइल्स। अन्यथा, आप अनुमति की कमी के कारण कुछ सबट्री मिस करने का जोखिम उठा सकते हैं। इसके अलावा, आपको चेक करना चाहिए कि सूची चामोद से पहले या बाद में स्काउट की गई है, अन्यथा, ऊपर के समान। और हाँ, मैं xargs का उपयोग करने से बचना चाहूँगा।
स्टेफानो बोरीनी

1
xargsकई निष्पादन के लिए लंबी कमांड लाइनों को तोड़ने के लिए पर्याप्त स्मार्ट है। अपने xargs manpage से परामर्श करें और जाँच अवश्य करें xargs --show-limits
माइक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.