फ़ाइलों से पुनरावर्ती बिट को हटाने योग्य कैसे करें (निर्देशिका नहीं)


73

जब मैं अपने मैक या उबंटू मशीन में एक यूएसबी स्टिक (एफएटी) प्लग-इन करता हूं, तो सभी फाइलों में निष्पादन योग्य बिट्स सेट होते हैं। निर्देशिका संरचना को मेरी हार्ड डिस्क पर कॉपी करने के बाद मैं फ़ाइलों से केवल निष्पादन योग्य बिट्स को कैसे हटाता हूं और उन निर्देशिकाओं पर रखता हूं?


जवाबों:


132

GNU chmod(उबंटू पर) सिंगल कमांड वेरिएंट (करंट डायरेक्टरी में शुरू) के साथ:

chmod -R -x+X .

स्पष्टीकरण:

  • -R - पुनरावर्ती संचालित करें
  • -x - सभी उपयोगकर्ताओं के लिए निष्पादन योग्य झंडे हटा दें
  • +X - सभी उपयोगकर्ताओं के लिए निष्पादन योग्य झंडे सेट करें यदि यह एक निर्देशिका है

इस मामले में पूंजी Xकेवल निर्देशिकाओं पर लागू होती है क्योंकि सभी निष्पादन योग्य झंडे साफ कर दिए गए थे -x। अन्यथा +Xनिष्पादन योग्य ध्वज (ओं) को भी सेट करता है यदि झंडा मूल रूप से उपयोगकर्ता, समूह या अन्य के लिए सेट किया गया था।

बीएसडी के साथ chmod(जो मैक ओएस एक्स पर मौजूद है) आपको इसे दो कमांड में अलग से करना होगा:

sudo chmod -R -x * && sudo chmod -R +X *

(यदि आप मुख्य निर्देशिका में छिपी हुई फ़ाइलों को भी शामिल करना चाहते हैं, तो आपको * (to) (बिंदु) को बदलने की आवश्यकता है, लेकिन अप्रयुक्त है।)


उबंटू 13.04 पर एक मामूली ट्विक आवश्यक है:chmod -R a-x+X *
ईरो ऑल्टेन

@EeroAaltonen: नोट के लिए धन्यवाद। यह तब हो सकता है जब आपकी अनुमति सभी के लिए अनुमति umaskनहीं देती है x। क्या आप डिफ़ॉल्ट का उपयोग करते हैं umaskया आपने इसे बदल दिया है? क्या आप कृपया umaskकमांड का आउटपुट भेज सकते हैं ? आपके समाधान के अलावा यह संभावना भी है: chmod -R a-x,+X *जो xआपके अनुसार अनुमति निर्धारित करेगा umask। मैं उत्तर को अपडेट करूंगा लेकिन मैं पहले बीएसडी / मैक ओएस एक्स में व्यवहार की जांच करना चाहूंगा।
पाबौक

@pabouk ऊप्स! यह वास्तव में CentOS बॉक्स जहाँ मैं 0007. करने के लिए अपने umask सेट था
ईरो Aaltonen

यह सिर्फ दुख की बात है ... :( मुझे findइसका जवाब नीचे दिए गए वेरिएंट में पसंद है, यह सरल साधनों के संयोजन की शैली है जो वन थिंग वेल करते हैं।
mikezter

2
का प्रयोग करें .बजाय *यदि आप इस सभी फाइलों को लागू किया जा करना चाहते हैं
जॉन मैगनोलिया

46

यदि आप पहले सही रास्ते पर आते हैं:

find . -type f -exec chmod -x {} \;

या

chmod -x $(find . -type f)

खोज पथ में टाइप 'f' (जिसका अर्थ है नियमित फ़ाइल) की सभी फाइलें पाता है। और फिर प्रत्येक फ़ाइल पर chmod -x कहता है। {} फ़ाइल नाम और \ के लिए प्रतिस्थापित किया जाता है; chmod कमांड को समाप्त करता है।


6
यदि आपका findसमर्थन करता है, तो -exec ... \+इसके बजाय का उपयोग करें -exec ... \;- इसे कम fork+ execs की आवश्यकता होगी । यदि यह नहीं है, का उपयोग करें find ... -print0 | xargs -0 ...
युगीन।

5
मैं इस तकनीक है, लेकिन साथ "-perm 111" खोजने के लिए जोड़ा का उपयोग किया है, तो यह केवल chmod के लोगों को एक्स-बिट निर्धारित है कि:find . -type f -perm +111 -exec chmod -x {} \;
Chrish

4
+1 @Matthijs यही कारण है कि यह पाबौक के समाधान से बेहतर है कि यह कमांड अकेले निर्देशिका को छोड़ देता है, जबकि पाबॉक सभी निर्देशिकाओं में निष्पादन योग्य बिट को फिर से सेट करता है। कुछ निर्देशिकाएं हो सकती हैं जिनमें निष्पादन योग्य बिट सेट नहीं है, और पाबौक की कमान इसे सेट करती है, जबकि कोई भी उन्हें छोड़ने की इच्छा कर सकता है।
MariusMatutiae

दूसरा दृष्टिकोण उन रास्तों के लिए विफल हो जाएगा जिनमें रिक्त स्थान हैं।
मेस्ट्रेलेन

@ कुशल: यदि आपका findसमर्थन -print0मुझे पूरा यकीन है कि यह भी समर्थन करेगा-exec
MestreLion

3

लिनक्स और यूनिक्स के तहत एक टर्मिनल विंडो में या मैक ओएस एक्स पर, टर्मिनल में इसका उपयोग करें।

find . -type f -print0 | xargs -0 chmod -x

1
यह संक्षेप में, 2011 से
मैथिज्स

क्या आप इस कमांड लाइन को याद कर सकते हैं? मैं नहीं कर सकता।
माइक एल

मैथिज्स के उत्तर के नीचे की टिप्पणी को देखें कि यह उत्तर क्यों उपयोगी है।
पैट्रिक

2

जिस chmod -x+Xतरह से ubuntu पर मेरे लिए काम नहीं किया, इस प्रकार मैंने यह न्यूनतम अजगर स्क्रिप्ट लिखी:

#!/usr/bin/python3
import os
for par, dirs, files in os.walk('.'):
    for d in dirs:
        os.chmod(par + '/' + d, 0o755)
    for f in files:
        os.chmod(par + '/' + f, 0o644)

यदि आपके फ़ाइल सिस्टम में सॉकेट जैसी कोई फैंसी अतिरिक्त सामग्री हो सकती है, तो आप अंतिम चोमोड को एक कोशिश / पकड़ के साथ घेरना चाह सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.