मैं यूनिक्स की कमान कैसे खोजूं?


11

मुझे लगता है कि मैं खोज के अपने उपयोग में काफी उन्नत हूं, लेकिन हर बार जब मैं इसका उपयोग करता हूं तो मैं अपने जीवन के लिए -exec विकल्प को बंद करने के तरीके को याद नहीं रख सकता। मैं हर बार जब मैं इसका उपयोग करता हूं, तो अच्छा समय बिताता हूं। क्या मैं बस इसे पर्याप्त रूप से उपयोग नहीं कर रहा हूं या खुद से बहुत अधिक उम्मीद कर रहा हूं? एक विशिष्ट उदाहरण से शुरू करें जो मुझे निराश करता है।

निर्देशिका संरचना में सभी गलत अनुमतियों के साथ फाइलें छिपी हुई फाइलें प्रतीकात्मक लिंक आदि हैं। मैं स्वामित्व को उचित मूल्य में बदलना चाहता हूं

find . -type f -exec chown username {} \;
find . -type d -exec chown username {} \;
find . -type d -exec chgrp usergroup {} \;
find . -type f -exec chgrp usergroup {} \;

(मुझे माफ कर दो अगर अंत पीछे की ओर है ... मैंने इसे एक घंटे पहले देखा था और अभी भी मुझे यकीन नहीं है)

लेकिन मैं mounts, प्रतीकात्मक लिंक, आदि के कारण इसे चलाने से डरता हूं। मैंने चामोद का अंतिम नासमझ बना दिया है। * और क्या यह पहले मुझ पर ऊपर की ओर फिर से आया था। मुझे पता है कि -xdev विभाजन को पार कर जाएगा, लेकिन मुझे यकीन नहीं है कि निर्देशिकाओं के अंदर रहने वाली फ़ाइलों का क्या होगा जो प्रतीकात्मक लिंक हैं।

तो एक जानवर इस जानवर को कैसे मारता है जो महत्वपूर्ण फाइलों को मार सकता है?

नीचे और सबसे अच्छे सुझावों की भविष्यवाणी करते हुए अपडेट करें :

  1. एक प्रैक्टिस डायरेक्टरी से जुड़ी और अन्य प्रैक्टिस डायरेक्टरी से जुड़ी हुई हों।
  2. गैर-सहज निष्पादन आदेश के बजाय xargs का उपयोग करें।
  3. पवित्रता और सुरक्षा के लिए -exec echo {} का उपयोग करें
  4. अर्ध उपनिवेश विशेष है और आप इससे बच रहे हैं इसलिए एस्केप चार पहले है
  5. -या कमांड आपको चयन मानदंडों को संयोजित करने में मदद कर सकता है।

मैं Print0 के बारे में थोड़ा उलझन में हूं, लेकिन xargs हमेशा पहली नज़र के अभ्यास में समझने में आसान नहीं है कि मैं कोशिश करता हूं और इससे बचता हूं।


1
मैं इसे याद नहीं कर सकता, इसलिए मैं इसे xargs में पाइप करता हूं।
अनुनादक

2
जब आप सही कमांड बनाने से संतुष्ट होते हैं, तो इसे + के बजाय + के साथ चलाने पर विचार करें; यह + के साथ तेज़ी से चलेगा क्योंकि निष्पादन कमांड को अक्सर कम कहा जाएगा।
6

wzzrd, के बजाय + के बजाय का उपयोग करने के बारे में महान टिप;
डैनियल लॉसन

जवाबों:


19

ठीक है, जहाँ तक -execसिंटैक्स जाता है, आप बहुत से लोगों को पसंद कर सकते हैं, त्याग कर उपयोग करें xargs:

find . -type f | xargs chown username

(या फ़ाइल्स-विथ-स्पेस-एंड-अदर-नॉनसेंस-इन-सेफ वर्जन)

find . -type f -print0 | xargs -0 chown username

या, अर्धविराम के साथ करने के लिए सही चीज़ को याद रखने की कोशिश करने के लिए, जिसे आपको अपने सिर में ड्रिल करने की आवश्यकता है वह यह है कि आप अर्धविराम का उपयोग उस आदेश को समाप्त करने के लिए कर-exec रहे हैं जो चल रहा है, और आपको अर्धविराम से बचना होगा क्योंकि यह विशेष है का अर्थ है bash। यही कारण है कि यह बैकस्लैश अर्धविराम है। आपको लगता है कि {}प्रतिस्थापन भाग ठीक है।

फ़ाइलों को मारने के रूप में और इतने पर, यदि आप कुछ बड़ा और खतरनाक चला रहे हैं जैसे कि आप के बारे में बात कर रहे हैं, तो पहले यह करें:

find . -type f -exec echo chown username {} \;

और परिणामों की समीक्षा करें। यह मूल रूप से एक "ड्राई रन" है जहां आप आज्ञाओं को देख रहे हैं यदि आप इसे चलने देंगे। निश्चित रूप से एक अच्छा अभ्यास। .*समस्या के साथ मदद नहीं करेगा , लेकिन आप जानते हैं कि अब ऐसा नहीं करना चाहिए। :)


1
+! 'इको' अभ्यास के लिए सूखा रन। मैं हमेशा एक बड़े बदलाव के लिए इसका इस्तेमाल करता हूं
स्टीव फॉली

3

मुझे आश्चर्य है कि किसी ने अभी तक निम्नलिखित विकल्प का उल्लेख नहीं किया है:

find . -type f -ok chown username {} \;

यह सिंटैक्स निष्पादित करने से पहले कमांड की पुष्टि करेगा। यह सबसे अच्छा काम करता है यदि आप अपने मैच को अपेक्षाकृत कम संख्या में फाइल होने की उम्मीद करते हैं क्योंकि यह हर एक के लिए संकेत देगा।

कुछ जवाबों का उल्लेख है xargs, लेकिन GNU के साथ यह पता चलता है कि यह अनावश्यक है:

find . -type f -exec chown username {} \+

ध्यान दें कि + को आमतौर पर भागने की आवश्यकता नहीं है, लेकिन वैसे भी ऐसा करने की आदत डालना अच्छा है।


क्या आप प्लस चिह्न की प्रकृति की व्याख्या कर सकते हैं ... वास्तव में यह क्या कर रहा है? शेल इसे प्रोसेस कर रहा है या कमांड। मुझे लगता है कि मैं ग्नू-खोज के लिए स्रोत कोड डाउनलोड करने जा रहा हूं क्योंकि यह एक दिलचस्प विषय है।
ओब्ब्लास

खोज यह प्रसंस्करण है। उस विकल्प के बारे में अधिक जानने के लिए मनुष्य पढ़ें।
कामिल किसियल

3

यह वह चीज है जिसके लिए आदमी है: चीजों को याद रखना कठिन हो सकता है, इसीलिए * nix कमांड में मैन पेज शामिल हैं। आप सिंटैक्स पर अनुस्मारक के लिए हमेशा मैन पेज के ऐक्शन अनुभाग की जांच कर सकते हैं man find:। हालाँकि, मैन पेज फ्रेंडली नहीं लग सकते हैं, एक बार पढ़ने के बाद आप उन्हें बहुत अच्छे लगते हैं।

फ्रंट-एंड या व्रपर बनाएं: जब मैं जीएनयू में बेहतर होना चाहता था, तो मैंने पाया कि मैंने एक जीयूआई फ्रंट एंड लिखा था जो यह बताता है कि पायथन, ग्लेड और पाइगटेक के साथ कमांड्स मिलते हैं। यह एक अच्छा व्यायाम है अगर आप इसे वास्तव में अच्छी तरह से जानना चाहते हैं।

प्रैक्टिस डायरेक्टरी रखें: अन्त में, मेरे घर में हमेशा 'स्क्रैप' डायरेक्टरी होती है, जो शक्तिशाली कमांड्स के साथ खेलने के लिए होती है, जब 'इको' जैसी कोई चीज इसे काटती नहीं है। तुम खोल विस्तार का उपयोग करने के लिए जल्दी से कुछ के साथ फ़ाइलों का एक गुच्छा बना सकते हैं:

for i in {1..100}; do touch "$i"; done

अजीब प्रैक्टिस डायरेक्टरी एक ऐसी चीज है जिसे मैंने कभी नहीं माना।
ojblass

1

आप '-and' और '-or' ऑपरेटरों के साथ भावों को जोड़ सकते हैं। -और निहित है:

find . -type f -name "plainfile" ...

के समान है

find . -type f -and -name "plainfile" ...

या ऑपरेटर आपकी 4 कमांड की सूची को 2 तक कम कर सकता है:

find . -type d -or -type f ...

और अंत में, खोजने के लिए संबंधित नहीं है, लेकिन गाउन समूह को भी सेट कर सकता है। इसलिए, नामों के साथ रिक्त स्थान का मुकाबला करने के साथ-साथ हम समाप्त होते हैं:

find . -type d -or -type f -exec chown username:usergroup '{}' \;

-या व्यवसाय के साथ क्या मिलता है। [सिसक]
ओब्ब्लास

@ojblass: 'और' या 'या' का उपयोग करते हुए भावों को मिलाता है, यदि डिफ़ॉल्ट रूप से '-and' या '-or' निर्दिष्ट नहीं है, तो '-और' का उपयोग अंतर्निहित रूप से किया जाता है। तो 'find -type d -type f' टाइप करें क्योंकि कुछ भी नहीं मिलेगा क्योंकि डायरेक्टरी और फाइल कुछ भी नहीं है ।
स्टीव फॉली

0

बंद करते समय मैं सिर्फ उपयोग करने के बारे में सोचता हूं; कई प्रोग्रामिंग भाषाओं के साथ और फिर इससे बचना। बस याद रखें कि भागने की जरूरत है और यह आपके लिए बहुत आसानी से आता है।


0

आपके द्वारा उपयोग किए जा रहे खोज के संस्करण के आधार पर, विभिन्न विकल्प हैं जो आपकी सहायता कर सकते हैं। GNU खोज संभवतः सबसे शक्तिशाली है और इससे आपको अपने दूसरे (निहित) प्रश्न में मदद मिल सकती है

उदाहरण के लिए - डिफ़ॉल्ट व्यवहार प्रतीकात्मक लिंक को रोकना नहीं है, लेकिन आप इसे ओवरराइड कर सकते हैं; और -mount विकल्प माउंट पॉइंट्स के पार जाना बंद कर देता है

अपने स्थानीय मैन पेजों में देखें


0

कुछ का तर्क होगा कि xargs का विकल्प -exec विकल्प की तुलना में तेज़ है क्योंकि यह प्रत्येक फ़ाइल के लिए एक बार कमांड निष्पादित नहीं करेगा, लेकिन मुझे इस बात की चिंता नहीं होगी कि बड़े पैमाने पर नौकरियों के अलावा गैर-तुच्छ राशि ले रही है।

व्यक्तिगत रूप से, मैं आमतौर पर केवल निष्पादन के बिना चलता हूं

find /path/to/dir -name whatever

सुनिश्चित करें कि आउटपुट सही दिखता है, और फिर उस सूची पर मेरी कमांड चलाएं।

chown user:group `find /path/to/dir -name whatever`

चीजों को करने के लिए "नहीं" का सही उदाहरण। रिक्त स्थान के साथ फ़ाइलनाम।
इयान केलिंग

हां, यह एक संभावित समस्या है जिसे मुझे शायद स्वीकार करना चाहिए। हालाँकि मेरी बात कुछ भी निष्पादित करने से पहले खोज आउटपुट को पढ़ने के बारे में थी, जहां आप रिक्त स्थान या अन्य फ़ाइल नाम पागलपन को देखेंगे।
अभिषेक

0

उचित व्यवहार के लिए कुछ गोले (बाश न करें) {} से बच जाएँ।

\{\} or '{}'

खोज मैनुअल माहिर खोजने के लिए अच्छा है।


नहीं, तुम नहीं; वे {} के समान रन पाते हैं। वे खोज कमांड का हिस्सा हैं: वे एक टोकन हैं जो खोज कमांड के परिणाम से बदल जाता है। फ़ंक्शंस को परिभाषित करते समय या चर को कॉल करते समय उनका केवल अर्थ ही होता है, इसलिए आप उन्हें मूल प्रश्न के रूप में उपयोग कर सकते हैं।
6

मैन पेज से इसकी। मैंने यह कहने के लिए अपडेट किया है कि यह लागू नहीं है।
इयान केलिंग

0

इससे पहले कि आप ऐसा कुछ भी करें, यह सुनिश्चित करें कि आपके द्वारा इस कमांड को चलाने की निर्देशिका उसी फाइल सिस्टम में / usr या / etc के रूप में नहीं है। (अन्यथा अगर मेरे घर निर्देशिका में / etc / passwd या / bin / sh के लिए एक कठिन लिंक है, तो आपने मुझे केवल उन लोगों का स्वामित्व दिया है और एक साइड-इफ़ेक्ट के रूप में मैं अब मशीन का मालिक हूं)।

यदि आप एक निर्देशिका के माध्यम से फिर से आना चाहते हैं और सभी फाइलों / निर्देशिकाओं को एक सरल तरीके से चुन सकते हैं

chown -Rh उपयोगकर्ता: उपयोगकर्ता समूह उपयोगकर्ता /

करूंगा। सुनिश्चित करें कि आप -h का उपयोग करते हैं या चांस प्रतीकात्मक लिंक का पालन करेंगे।


मुझे नहीं लगता कि यह क्रॉस प्लेटफॉर्म है। मेरे अभ्यास वातावरण द्वारा प्रदर्शित फ़ाइलों के 247K के साथ भी विफल रहता है। मुझे यकीन नहीं है कि क्यों
ojblass

मुझे लगता है कि आप एक बग से अधिक पाया है, जो आपने एक क्रॉसप्लेट रिकॉर्डर समस्या पाई है। विफल होने पर कौन सा संस्करण और बाहर निकलने की स्थिति क्या है? जहाँ तक मैं बता सकता हूँ कि यह पहली बार bsd संस्करणों में उत्पन्न हुआ था; यह निश्चित रूप से सनोस 5.3 और अल्ट्रिक्स और इरिक्स में है। फेल होने से पहले यह कितनी प्रक्रिया करता है?
क्रिस

आप सही हैं कि यह AIX 5.3, AIX 5.2 पर काम करता है, लेकिन AIX 4.3, NCR, HP 11, HP 10.20, या मेरे DSL वितरण पर नहीं। सभी मामलों में यह 60k फ़ाइलों पर या उसके पास विफल प्रतीत होता है।
ओब्ब्लास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.