वर्तमान निर्देशिका में सभी फ़ाइलों को कैसे चेंब करें / चेंम करें?


56

मैं वर्तमान निर्देशिका में कुछ फ़ाइलों (और निर्देशिकाओं) के स्वामित्व और अनुमतियों को बदलने की कोशिश कर रहा हूं। मैंने यह कोशिश की:

chown username:groupname .

... यह उम्मीद करना कि यह वर्तमान निर्देशिका की सभी फाइलों को प्रभावित करेगा, लेकिन केवल उस निर्देशिका को प्रभावित करता है जो मैं हूं (जो मैं करना चाहता हूं उसके विपरीत है)। मैं वर्तमान निर्देशिका को प्रभावित किए बिना सभी फाइलों पर इसे बदलना चाहता हूं।

मैं वर्तमान निर्देशिका में सभी फ़ाइलों को कैसे चुन और चोद सकता हूँ?


man chownऔर man chmodआसानी से अपने प्रश्न का उत्तर दें।
शी

2
@ शी मुझे लगता है कि यह एक उचित प्रश्न है। उस आदमी पृष्ठ को पढ़ना मदद नहीं करेगा। ग्लोबिंग का हिस्सा नहीं है chmod। यह शेल में बनाया गया है। ग्लोबिंग पर दस्तावेज़ीकरण पढ़ने से आप से जीवन बेकार हो जाता है (मैंने सभी ज़ीश की विशेषताओं का पता लगाने में बहुत समय बिताया)।
djf

1
@djf:chown -R user:group .
शि

जवाबों:


96

आप उपयोग करना चाहते हैं chown username:groupname *, और शेल *को वर्तमान निर्देशिका की सामग्री तक विस्तृत करने दें । यह वर्तमान निर्देशिका में सभी फ़ाइलों / फ़ोल्डरों के लिए अनुमतियाँ बदल देगा, लेकिन फ़ोल्डर्स की सामग्री नहीं।

आप ऐसा भी कर सकते हैं chown -R username:groupname ., जो वर्तमान निर्देशिका पर अनुमतियों को बदल देगा, और फिर अनुमतियों को बदलने के लिए इसके अंदर और सभी सबफ़ोल्डर्स को पुन: व्यवस्थित कर देगा।

chown -R username:groupname *केवल वर्तमान निर्देशिका को अकेले छोड़ते समय, सभी फ़ाइलों और फ़ोल्डरों पर अनुमतियों को पुनरावर्ती रूप से बदल देगा। यह शैली और पहली शैली वह है जो मैं खुद को सबसे अधिक बार उपयोग कर पाता हूं।


2
@ और अपने गार्ड पर रहो, हालांकि, वह थके हुए या अप्रस्तुत दोनों दोस्त और दुश्मन हो सकते हैं।
डारथ एंड्रॉइड

5
इसके अलावा, अवधि के खतरों से सावधान रहें। जैसा कि यह कीबोर्ड पर "सर्वशक्तिमान" के ठीक बगल में रखा गया है। एक सरल टाइपो आसानी से बदल chown -R username:groupname .सकता है chown -R username:groupname /। 2 दिन का दूसरा कार्य करना 2 दिन का दुःस्वप्न।
टेयोनॉन

@ यही कारण है कि मुझे शायद -vअपने सभी पुनरावर्ती आदेशों का उपयोग करना शुरू करना चाहिए , लेकिन बहुत आलसी
कोलोब कैनियन

बस सबसे अच्छे और सबसे संक्षिप्त एवेज़र के रूप में उकेरा गया, हालाँकि मैं विशिष्ट होगा और निर्देशिका को नाम दूंगा, बस कीबोर्ड की एक पर्ची से बचने के लिए:chown -R username:groupname directoryname
डेव एवरिट

9

मुझे लगता है कि आप यह चाहते हैं:

chown username:groupname *

यदि आप भी उपनिर्देशिका को फिर से बदलना चाहते हैं, तो आपको स्विच की आवश्यकता होगी -R(-r

chown -R username:groupname *


0

chownमहान है यदि आप एक सुपरयूज़र हैं। मेरे पास एक ऐसा मुद्दा था जहां makeमेरी निर्देशिका में कोई और व्यक्ति चला था , और अब कुछ फाइलें थीं जिन्हें मैं संशोधित नहीं कर सकता था। यहां मेरा वर्कअराउंड है जो फाइलों और निर्देशिकाओं को संभालता है, हालांकि यह प्रत्यय के साथ झूठ बोलने वाली निर्देशिकाओं को छोड़ देता है .mkmeownerअगर यह उन्हें हटा नहीं सकता है।

  • निम्न स्क्रिप्ट फ़ाइलों और निर्देशिकाओं के स्वामित्व में परिवर्तन करती है, जो वर्तमान उपयोगकर्ता के स्वामित्व में है, प्रत्येक निर्देशिका की नई प्रतिलिपि बनाकर अनुमति देने का प्रयास करती है या वर्तमान उपयोगकर्ता के स्वामित्व वाली फ़ाइल नहीं हटाती है (या हटाने की कोशिश कर रही है) मूल फ़ाइल, और उचित नामकरण।
  • इसका आशय यह है कि "मुझे मालिक बनाओ" के लिए एक संक्षिप्त नाम होना चाहिए। मैं अंडरस्कोर का उपयोग नहीं करता क्योंकि वे टाइप करने के लिए एक दर्द हैं।

उदाहरण:

% mkmeowner .

% mkmeowner dirpath1 dirpath2
  • यह mkmeowneroneआपके पथ में होने के लिए निम्न स्क्रिप्ट की आवश्यकता है ।

mkmeowner:

#!/bin/bash
[ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] && cat << END && exit 0
Usage: $0 dirorfile [direorfile2 ...]:
    change ownership of directories or files to current user.
    Current user must have permissions to read those and write to owner directory.
END
mkmeownerone=`which mkmeownerone`
for d in $*; do
    find "$d" -not -user `whoami` -exec $mkmeownerone {} \;
done

mkmeownerone:

#!/bin/bash
# change ownership of one file or directory
f="$1"
expr match "${f}" '.*\.mkmeowner$' > /dev/null && exit 1 # already tried to do this one
if mv -f "$f" "${f}.mkmeowner"; then
    cp -pr "${f}.mkmeowner" "$f" && rm -rf "${f}.mkmeowner"
    exit 0
fi
exit 1

1
(1) हम ऐसे उत्तर पसंद करते हैं जिनमें कुछ स्पष्टीकरण शामिल हों। मुझे आश्चर्य हुआ जब मैंने आपकी स्क्रिप्ट पढ़ी और देखा कि उन्होंने क्या किया, क्योंकि आपके परिचयात्मक पैराग्राफ ने मुझे कोई सुराग नहीं दिया। (2) आप यह बताना भूल गए कि उपयोगकर्ता को mkmeowneronePATH की खोज में लगाना चाहिए ।  mkmeownerअगर ऐसा नहीं किया जाता है, तो उड़ा देंगे। (3) कृपया सीखें कि शेल कमांड और स्क्रिप्ट में उद्धरण का उपयोग कैसे (यानी, कब और कहाँ) किया जाए। कहना ${f}एक उपयोगी विकल्प नहीं है; यह देखो । … (Cont'd)
स्कॉट

(योगदान करें)… (4) यदि आप किसी निर्देशिका पर अपनी स्क्रिप्ट चलाते हैं, तो यह संभावित रूप से उस निर्देशिका की प्रत्येक फ़ाइल को दो बार कॉपी करेगा। (५)  exprपुरातन है। शेल में साधारण स्ट्रिंग मिलान करना अधिक कुशल है; बैश नियमित अभिव्यक्ति मिलान का भी समर्थन करता है। उस मामले के लिए, आप फ़ाइल नाम परीक्षण find. (6) में कर सकते हैं, आपका expr matchआदेश परीक्षण करता ${f}है mkmeownerकि क्या इसके साथ समाप्त होता है , न कि इसके साथ समाप्त होता है .mkmeowner। इसलिए स्क्रिप्ट पर काम नहीं होगा। … (Cont'd)
स्कॉट

(Cont'd) ... अब, यकीनन, यह एक अच्छी बात है - आप चलते हुए नहीं चाहते और संभवतः स्क्रिप्ट को हटाते समय चल रहे हैं। (यह जरूरी नहीं कि समस्या पैदा करने वाला हो, लेकिन यह गड़बड़ हो सकता है।) लेकिन आपको इस तरह के विशेष मामलों को समझना चाहिए (और दस्तावेज़)। (() आप मल्टी-वर्ड स्ट्रिंग्स में अंडरस्कोर का उपयोग करना चाह सकते हैं।  dirorfileपढ़ना और समझना (तुलना करना dir_or_file) कठिन है , और जब मैंने देखा mkmeowner, तो मेरा पहला विचार एक बिल्ली ( mk +  meow +  ner) का था।
स्कॉट

नोट्स स्कॉट के लिए धन्यवाद। 1. मुझे लगा कि मेरे पास एक स्पष्टीकरण है लेकिन मुझे अधिक स्पष्ट होने दें। 2. अच्छी बात है। मैंने उसे अपनी मूल लिपि में कैद कर लिया था, लेकिन संदर्भ निकाल लिया। 3. मैं 30 साल से शेल स्क्रिप्ट लिख रहा हूं, लेकिन यकीन है, मैं और अधिक सीखने की कोशिश करूंगा। 4. हाँ, यह करता है। उद्देश्य पर क्योंकि अगर मेरे पास निर्देशिका नहीं है, तो मैं इसे हटा नहीं सकता। मैं इसका उल्लेख कर सकता हूं। 5. याह मैं बूढ़ा हो गया हूँ, लेकिन expr अभी भी बहुत अच्छी तरह से काम करता है 6. हा अच्छी बात है। 7. हो सकता है, मुझे लगता है कि मैं कुछ कलात्मक लाइसेंस प्राप्त करता हूं, हालांकि अंडरस्कोर एक नियम नहीं है। मुझे एक स्क्रिप्ट की आवश्यकता है जो मेव्स बनाती है!
sbcondor

मुझे नहीं लगता कि $ {f}, सही में कुछ गलत है? यह जरूरत से कुछ ही लंबा है। यह एक प्रारूप है जिसका मैं अक्सर उपयोग करता हूं क्योंकि मैं $ {f} .mkmeowner जैसी लंबी स्ट्रिंग बनाने के लिए एक चर का उपयोग करना चाहता हूं, और मुझे यह याद रखने की ज़रूरत नहीं है कि $ f.heck का अर्थ $ {f} + हेक या $ {है f.heck}
sbcondor
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.