कमांड में पास नहीं होने वाले रिक्त स्थान के साथ फ़ाइल नाम में xargs के लिए खोज -नाम दर्ज करना


26

आम तौर पर उनके फ़ाइलनाम में रिक्त स्थान वाली फ़ाइलों को निकालने के लिए आपको दौड़ना होगा:

$ rm "file name"

लेकिन अगर मैं कई फाइलें निकालना चाहता हूं, जैसे:

$ find . -name "*.txt" | xargs rm

यह उन में रिक्त स्थान वाली फ़ाइलों को नहीं हटाएगा।


यहाँ पूरा अनुमान: find -name "*\ *.txt" | xargs rmदो शब्द फ़ाइलों के लिए काम करता है ?
वांडरर

जवाबों:


49

आप बता सकते हैं findऔर xargsदोनों अशक्त टर्मिनेटर का उपयोग करते हैं

find . -name "*.txt" -print0 | xargs -0 rm

या (सरल) अंतर्निहित -deleteकार्रवाई का उपयोग करेंfind

find . -name "*.txt" -delete

या (धन्यवाद @kos)

find . -name "*.txt" -exec rm {} +

जिनमें से ARG_MAXकिसी को भी आवश्यकता के बिना सिस्टम की सीमा का सम्मान करना चाहिए xargs


1
आप इसे दो बार कठिन नहीं बना सकते हैं :) जब से आपने उल्लेख किया है कि ARG_MAXमैं भी find . -name "*.txt" -exec rm {} \;एक "सुरक्षित शॉट" का उल्लेख करूंगा
kos

3
इस प्रकार गुरु का कहना है: हमेशा xggs -0 याद रखें।
यहोशू

1
सुपर महत्वपूर्ण बिंदु: -print0अंतिम विकल्प होना चाहिए (या कम से कम बाद में -name "*.txt") अन्यथा यह फाइलों तक सीमित नहीं रहेगा*.txt ...
केव

1

संयोग से, यदि आपने ढूंढने के अलावा कुछ का उपयोग किया है, तो आप null बाइट्स के साथ newlines को बदलने के लिए tr का उपयोग कर सकते हैं।

उदाहरण के लिए। निम्नलिखित एक लाइनर एक निर्देशिका में 10 अंतिम संशोधित फ़ाइलों को हटाता है, भले ही उनके नाम में स्थान हो।

ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm


हां, यह काम करता है।
पीटर मोर्टेंसन

0

Xargs कमांड डिफॉल्टर्स के रूप में टैब, स्पेस और नई लाइनों का उपयोग डिफ़ॉल्ट रूप से करता है। आप इसे केवल -d विकल्प के साथ newline वर्ण ('\ n') का उपयोग करने के लिए कह सकते हैं:

find . -name "*.txt" | xargs -d '\n' rm

इतने पर स्रोत जवाब


इसका जवाब बीएसडी सिस्टम के लिए (के ) के -0बजाय उल्लेख है। उबंटू क्या उपयोग करता है? यहां स्वीकृत उत्तर का उपयोग करता है । क्या सही है? -dxargs-0
पीटर मोर्टेंसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.