'>' के साथ एक अन्य कमांड के लिए स्ट्रिंग के रूप में xargs तर्क पास करें?


9

मान लीजिए कि मेरे पास फाइलों का एक गुच्छा है /tmp/

मैं करता हूँ

find . -type f | xargs -iFILES

और मैं md5sumप्रत्येक फ़ाइल में एक ही नाम के साथ फ़ाइल में आउटपुट करना चाहता हूं , लेकिन .md5विस्तार के साथ ।

find . -type f | xargs -iFILES md5sum FILES > FILES.md5

यह प्रत्येक फ़ाइल के लिए md5 फ़ाइल बनाने के लिए माना जाता है जो कि कमांड द्वारा मिली है। इसके बजाय, यह सभी फ़ाइलों से चेकसम के साथ डिस्क पर एक एकल FILES.md5 फ़ाइल बनाता है।

मैं md5sum कमांड से कैसे कहूं कि FILES वर्तमान फ़ाइल नाम का प्रतिनिधित्व करता है न कि FILES शाब्दिक स्ट्रिंग का?

जवाबों:


4

आपको यह कहने का कोई तरीका चाहिए कि आप md5sumकिसी फ़ाइल का आउटपुट भेजना चाहते हैं । चूंकि find(या xargs) में यह कार्यक्षमता अंतर्निहित नहीं है, और md5sumकेवल मानक आउटपुट पर प्रिंट करने का तरीका जानता है, एक शेल पुनर्निर्देशन सबसे सीधा तरीका है।

ध्यान दें कि आपका आदेश किसी अन्य कारण से सामान्य स्थिति में काम नहीं करेगा: का आउटपुट स्वरूप findइनपुट प्रारूप नहीं है xargs, वे फ़ाइल नाम व्हाट्सएप के साथ भिन्न होते हैं या \"'find -execइसके बजाय उपयोग करें ।

find . -type f -exec sh -c 'md5sum "$0" >"$0.md5"' {} \;

7

IO पुनर्निर्देशन को संभालने के लिए आपको एक उपखंड का उपयोग करने की आवश्यकता है:

find . -type f | xargs -iFILES sh -c 'md5sum FILES > FILES.md5'

5

जीएनयू समानांतर के साथ आप कर सकते हैं:

find . -type f | parallel md5sum {} \> {}.md5

आपको समानांतर में md5sum चलाने का अतिरिक्त लाभ मिलता है और जैसे कि फाइलें:

My brother's 12" records.txt

आपके आदेश के क्रैश होने का कारण नहीं होगा। अधिक जानने के लिए इंट्रो वीडियो देखें: http://www.youtube.com/watch?v=OpaiGYxkSuQ

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