उदाहरण के लिए, अभी मैं फ़ाइलों जिसका यूनिक्स पथ मैं एक फाइल करने के लिए लिखा था की एक जोड़ी को बदलने के लिए निम्नलिखित का उपयोग कर रहा हूँ?
उत्तर
तो आपकी फ़ाइल बहुत बड़ी नहीं है और सभी फ़ाइलें हैं अच्छी तरह से नामित (रिक्त स्थान या उद्धरण की तरह अन्य विशेष वर्ण के बिना), तो आप बस कर सकते थे:
chmod 755 $(<file.txt)
आप विशेष वर्ण है, तो और/या file.txt
में कई लाइनें।
xargs -0 chmod 755 < <(tr \\n \\0 <file.txt)
अपने आदेश प्रविष्टि द्वारा 1 समय वास्तव में चलाने के लिए की जरूरत है:
xargs -0 -n 1 chmod 755 < <(tr \\n \\0 <file.txt)
यह इस नमूने के लिए की जरूरत नहीं है, chmod
के रूप में तर्क के रूप में एक से अधिक फ़ाइलों स्वीकार करते हैं, लेकिन इस मैच सवाल का खिताब ।
कुछ विशेष मामले के लिए, आप भी फ़ाइल तर्क का स्थान आदेश generateds में xargs
द्वारा निर्धारित कर सकते हैं:
xargs -0 -I '{}' -n 1 myWrapper -arg1 -file='{}' wrapCmd < <(tr \\n \\0 <file.txt)
हां।
while read in; do chmod 755 "$in"; done < file.txt
इस तरह आप cat
प्रक्रिया से बच सकते हैं।
cat
इस तरह के उद्देश्य के लिए लगभग हमेशा खराब होता है। अगर आप (एक निर्देशिका में सभी .txt फ़ाइलें उदाहरण के लिए) एक अच्छा चयनकर्ता है आप और अधिक के बारे में Useless Use of Cat.
से बचें * एक * 'बिल्ली 'से बचें एक अच्छा विचार है, लेकिन इस मामले में ** ** ** संकेत दिया गया आदेश' xargs' –
वह लिंक प्रासंगिक प्रतीत नहीं होता है, शायद वेब पेज की सामग्री बदल गई है? बाकी का जवाब भयानक है हालांकि – starbeamrainbowlabs
@starbeamrainbowlabs हां। ऐसा लगता है कि पेज ले जाया गया है। मैंने फिर से लिंक किया है और अभी ठीक होना चाहिए। धन्यवाद :) –
पढ़ सकते हैं तुम कर सकते हो:
for i in *.txt; do chmod 755 "$i"; done
या का एक संस्करण आपका:
while read line; do chmod 755 "$line"; done <file.txt
काम नहीं करता है कि यदि रेखा में रिक्त स्थान हैं, तो इनपुट रिक्त स्थान से विभाजित होता है, रेखा से नहीं। –
यदि आपको पता है कि आपके पास इनपुट में कोई सफेद जगह नहीं है:
xargs chmod 755 < file.txt
अगर वहाँ रास्तों में खाली स्थान के हो सकता है, और यदि आप जीएनयू xargs है:
tr '\n' '\0' < file.txt | xargs -0 chmod 755
मुझे xargs के बारे में पता है, लेकिन (दुख की बात है) यह बैश निर्मित सुविधाओं की तुलना में एक विश्वसनीय समाधान से कम लगता है जैसे कि पढ़ना और पढ़ना। इसके अलावा, मेरे पास जीएनयू xargs नहीं है, लेकिन मैं ओएस एक्स और xargs का उपयोग कर रहा हूँ यहां एक -0 विकल्प भी है। जवाब के लिए धन्यवाद। – hawk
@ हॉक संख्या: 'xargs' मजबूत है। यह टूल बहुत पुराना है और उसका कोड दृढ़ता से * पुनरीक्षित * है। उनका लक्ष्य शैल सीमाओं (64kchar/line या कुछ ऐसा) के संबंध में लाइनों का निर्माण शुरू करना था। अब यह टूल बहुत बड़ी फाइलों के साथ काम कर सकता है और फाइनल कमांड पर फोर्क की संख्या को कम कर सकता है। [मेरा जवाब] देखें (http://stackoverflow.com/a/13941223/1765658) और/या 'मैन xargs'। –
@hawk किस तरह से एक विश्वसनीय समाधान का कम? यदि यह लिनक्स, मैक/बीएसडी और विंडोज (हाँ, एमएसवाईएसजीआईटी के बंडल जीएनयू xargs) में काम करता है, तो यह जितना विश्वसनीय हो उतना विश्वसनीय है। –
मैं देख रहा हूँ आप बैश में चिह्नित है, लेकिन पर्ल भी यह करने के लिए एक अच्छा तरीका होगा:
perl -p -e '`chmod 755 $_`' file.txt
आप यह सुनिश्चित करने के लिए एक रेगेक्स भी लागू कर सकते हैं कि आपको सही फाइलें मिल रही हैं, उदाहरण के लिए केवल प्रक्रिया .txt फ़ाइलें करने के लिए:
perl -p -e 'if(/\.txt$/) `chmod 755 $_`' file.txt
"पूर्वावलोकन" क्या हो रहा है, बस दोहरे उद्धरण चिह्नों के साथ बैकटिक की जगह और print
पहले जोड़ें करने के लिए:
perl -p -e 'if(/\.txt$/) print "chmod 755 $_"' file.txt
बैकटिक्स का उपयोग क्यों करें? पर्ल में एक ['chmod' फ़ंक्शन] है (http://perldoc.perl.org/functions/chmod.html) –
मुझे इसका एहसास नहीं हुआ। इसे इंगित करने के लिए धन्यवाद :) –
आप 'perl -lpe' chmod 0755, $ _ 'file.txt' चाहते हैं - "ऑटो-चॉम्प" सुविधा –
आप उपयोग कर सकते हैं आप प्रत्येक पंक्ति के लिए समानांतर में अपने आदेश को चलाना चाहते हैं GNU Parallel
parallel -a <your file> <program>
आपकी फ़ाइल की प्रत्येक पंक्ति को तर्क के रूप में प्रोग्राम में पास कर दिया जाएगा। डिफ़ॉल्ट रूप से parallel
आपके CPU की गणना के रूप में कई धागे चलाता है। लेकिन आप इसे -j
- 1. <a href.. in PHP
- 2. एक्शन <T> या एक्शन <in T>?
- 3. <% $, <% @, <% =, <% # ... सौदा क्या है?
- 4. 'ऑपरेटर <<' के लिए 'std :: cout <<' में अस्पष्ट अधिभार <<
- 5. PHP क्या <<< मतलब है?
- 6. सी ++ प्रीप्रोसेसर आउटपुट में <built-in> क्या है?
- 7. कैसे बचें << - असाइन
- 8. <: <, <% <, =: = कंपाइलर में काम का स्केल कार्यान्वयन वास्तव में कैसे करता है?
- 9. ओवरलोडिंग ऑपरेटर << - सी ++
- 10. अंतर << a_value
- 11. गिटहब में रिमोट शाखा को बलपूर्वक कैसे हटाएं?</p> <pre><code>- pending-issues-in-project - new-issues-in-project </code></pre> <p>मैं <code>pending-issues-in-project</code> इस तरह हटाने का प्रयास:
- 12. >>>>,> |, ||, | <, <, <<
- 13. << ऑपरेटर और प्रत्यावर्तन
- 14. खोल में "<<(cmd args)" का अर्थ क्या है?
- 15. एक्सएमएल में <ArrayOf> की सूची <<
- 16. क्या <% साधन में से प्रत्येक की सूची (<% #, <% =, आदि ...)
- 17. <%! %> और <% %>
- 18. एएसपी.Net में, <% = और <% #
- 19. का अर्थ << = और | =
- 20. अधिभार ऑपरेटर << सरणी के लिए
- 21. PHP व्यंजक <<< EOB
- 22. ओवरलोडिंग ऑपरेटर << सरणियों के लिए
- 23. ऑपरेटर << एसटीडी के लिए की सी ++ श्रृंखलन :: उपयोग
- 24. cout << स्ट्रिंगस्ट्रीम
- 25. अस्थिर प्रारूपण एकाधिक रेखा <<
- 26. एकाधिक <html><body></html></body> उसी फ़ाइल में
- 27. Enumerable.ToList <>() <>
- 28. क्या स्ट्रीम के बीच का अंतर "<<" और लिखें
- 29. पीएचपी: <<< ob_start बनाम
- 30. प्रश्न <<
के लिए '-l' का उपयोग करें क्योंकि' xargs' प्रारंभिक निर्माण था इस तरह की जरूरतों का उत्तर देने के लिए, कुछ सुविधाओं, जैसे कि मौजूदा पर्यावरण में यथासंभव लंबे समय तक बिल्डिंग कमांड * इस मामले में जितनी कम हो सके 'चम्मोड' का आह्वान करने के लिए, * फोर्क्स को कम करना * प्रभाव सुनिश्चित करना। 'जबकि; do..done <$ file' implie 1 फ़ाइल के लिए 1 कांटा चल रहा है। 'xargs' हजारों फ़ाइलों के लिए 1 कांटा चला सकता है ... एक विश्वसनीय तरीके से। –
तीसरा आदेश मेकफ़ाइल में क्यों काम नहीं करता है? मुझे "अप्रत्याशित टोकन '<' 'के पास वाक्यविन्यास त्रुटि मिल रही है, लेकिन कमांड लाइन कार्यों से सीधे निष्पादन। –
यह मेकफ़ाइल विशिष्ट वाक्यविन्यास से जुड़ा हुआ प्रतीत होता है। आप कमांड लाइन को रिवर्स करने का प्रयास कर सकते हैं: 'cat file.txt | tr \\ n \\ 0 | xargs -0 -n1 chmod 755' –