से man xargs
xargs मानक इनपुट से आइटम पढ़ता है, जिसे रिक्त स्थान (जो डबल या सिंगल कोट्स या बैकस्लैश के साथ संरक्षित किया जा सकता है) या नईलाइनों द्वारा सीमांकित किया जाता है, और कमांड निष्पादित करता है (डिफ़ॉल्ट / बिन / गूंज है) एक या एक से अधिक बार किसी भी प्रारंभिक-तर्क के बाद। मानक इनपुट से पढ़ी गई वस्तुओं द्वारा। मानक इनपुट पर खाली लाइनों को अनदेखा किया जाता है।
हम (ज्यादातर) xargs परिसीमन को एक नई सीमा में बदलकर आपकी प्रारंभिक कमांड को ठीक कर सकते हैं:
ls | egrep '. ' | xargs -d '\n' rm
(ऐसा मत करो ... पर पढ़ें)
लेकिन क्या होगा अगर फ़ाइल नाम में एक नई रेखा है?
touch "filename with blanks
and newline"
क्योंकि यूनिक्स फ़ाइलनाम में रिक्त स्थान और नए अंक शामिल हो सकते हैं , यह डिफ़ॉल्ट व्यवहार अक्सर समस्याग्रस्त होता है; फ़ाइल नाम जिसमें रिक्त स्थान और / या नई लाइनें हैं, गलत तरीके से xargs द्वारा संसाधित किए जाते हैं। इन स्थितियों में -0 विकल्प का उपयोग करना बेहतर होता है , जो ऐसी समस्याओं से बचाता है।
ls
वास्तव में एक मानव द्वारा प्रत्यक्ष उपभोग के लिए एक उपकरण है , इसके बजाय हमें उस find
कमांड का उपयोग करने की आवश्यकता है जो फ़ाइल नाम को एक अशक्त चरित्र ( -print0
) के साथ अलग कर सकता है । हमें इनपुट ( -z
) और आउटपुट ( -Z
) को अलग करने के लिए अशक्त वर्णों का उपयोग करने के लिए grep को भी बताना होगा । अंत में, हम xargs को null वर्णों ( -0
) का उपयोग करने के लिए कहते हैं
find . -type f -print0 | egrep '. ' -z -Z | xargs -0 rm
echo
टाइपो से सुरक्षा के लिए इसे पहले चलाना चाहते हैं ।echo
सामने की ओर जोड़ें और यह उन सभी फाइलों को प्रिंट कर लेगा जो इसे हटाने जा रही हैं।