शेल स्क्रिप्ट, लूप और xargs में लूप सहित ऐसा करने के कई तरीके दिखाई देते हैं। इनमें से कौन सा सबसे अच्छा है, और कौन सा सबसे पोर्टेबल है?
शेल स्क्रिप्ट, लूप और xargs में लूप सहित ऐसा करने के कई तरीके दिखाई देते हैं। इनमें से कौन सा सबसे अच्छा है, और कौन सा सबसे पोर्टेबल है?
जवाबों:
find . -exec <command> {} \;
वृक्ष की जड़ या सामान्य रूप में वर्तमान निर्देशिका के लिए:
find <directory> -exec <command> {} \;
-name "*.c"लिए प्रयास करें या उदाहरण के -type dलिए ...
find ... | xargs ...मुहावरे का उपयोग करें , यह बैचों में फाइलों को संसाधित करता है, और यह आमतौर पर तेज होगा (लॉन्च की गई कम प्रक्रियाएं)।
का प्रयोग करें -print0खोजने के लिए विकल्प और -0करने का विकल्प xargsहै, तो आप रिक्त स्थान के साथ फ़ाइल या निर्देशिका नाम है:
find {dir} -print0 | xargs -0r {command}
व्हॉट्सएप से अलग की गई सूची के बजाय -print0फाइलनेम को प्रिंट के रूप में प्रिंट करने का विकल्प NUL, जबकि व्हॉट्सएप पर इसके इनपुट को तोड़ने -0का xargsनिर्देश देने का विकल्प NUL। चूँकि NULयूनिक्स फाइलनामों में ऐसे पात्रों में से एक की अनुमति नहीं है, इसलिए फ़ाइल नाम के भाग के लिए गलत होने का कोई तरीका नहीं है।
-rविकल्प वहाँ इतना है कि है xargsतो आपको एक त्रुटि नहीं देंगे, तो यह कोई इनपुट है।
यदि पोर्टेबिलिटी एक ऐसा मुद्दा है जिसे करने के शैल-विशिष्ट तरीकों से मैं दूर रहूंगा (बहुत सारे लोग विभिन्न शेल का उपयोग कर रहे हैं, लेकिन सामान्य रूप से और xargs वास्तव में बुनियादी उपकरण हैं जो कोई भी कट्टरपंथी तरीके से बदलने की हिम्मत नहीं करेगा) ।
खोजने और xargs के बुनियादी तर्कों का उपयोग करके आपको अधिक पोर्टेबल समाधान देना चाहिए।
अगर एक साथ तर्क करना स्वीकार्य है, तो खोजें | xargs शायद बेहतर परफॉर्मेंस देंगे, क्योंकि यह कमांड को फाइंड -सेक्स की तुलना में बहुत कम बार निष्पादित करेगा। यदि आप प्रत्येक फ़ाइल के लिए हर बार कमांड निष्पादित करना चाहते हैं या फ़ाइल के उपनिर्देशिका में निष्पादित करते हैं, तो आपको शायद -exec या -execdir का उपयोग करना चाहिए।
एक नियम के रूप में, शेल-विशिष्ट छोरों से दूर रहना बेहतर है; अधिकांश परिदृश्यों के लिए & xargs पर्याप्त हैं।
सुनिश्चित करें कि आपके द्वारा उपयोग किए जा रहे कमांड का संस्करण पहले से ही पुनरावर्ती ऑपरेशन के लिए ध्वज नहीं है। :)