फ़ाइल में फ़ाइल नामों की सूची पर कमांड निष्पादित कैसे करें?


11

मैंने उन फाइलों के नाम सूचीबद्ध किए हैं जिन्हें एक फाइल में डिलीट किया जाना है। मैं rmकमांड को फाइल कैसे पास कर सकता हूं ताकि यह उन्हें एक-एक करके डिलीट करे।


जवाबों:


11

यदि आपके पास प्रति पंक्ति एक फ़ाइल है, तो ऐसा करने का एक तरीका है:

tr '\n' '\0' < list_of_files_to_be_deleted.txt | xargs -0 -r rm --

फाइल लिस्ट को trकमांड के इनपुट के रूप में दिया गया है, जो फाइल सेपरेटर को लाइनफीड से नल बाइट में बदलता है और xargsकमांड इनपुट पर null बाइट्स द्वारा अलग की गई फाइल को पढ़ता है और rm कमांड को तर्कों के रूप में संलग्न फाइलों के साथ लॉन्च करता है।


1
मैं rm --बस के बजाय का उपयोग करने का सुझाव देता हूं rm, ताकि फ़ाइलनाम जो डैश के साथ शुरू हो सकते हैं उन्हें rmमापदंडों के रूप में नहीं माना जाएगा ।
मेष

यह काम नहीं आया दोस्त ........ tr: monu.txt' Try अधिक जानकारी के लिए अतिरिक्त ऑपरेंड tr -help '। rm: लापता ऑपरेंड अधिक जानकारी के लिए `rm --help 'आज़माएं। ........ यह सब मैं देख पा रहा हूँ
स्मारक २१'१३

1
क्या आपको फ़ाइल नाम से पहले <की याद आती है?
जोनास बर्लिन

मैंने xargs कमांड को थोड़ा बेहतर बनाया - जोड़ा - @artyom के सुझाव के अनुसार और जोड़ा -r यह सुनिश्चित करने के लिए कि इसे rm नहीं चलाता है अगर हटाने के लिए कोई फाइल नहीं है।
जोनास बर्लिन

5

उपरोक्त उत्तर ठीक है कि यह रिक्त स्थान और "अजीब कैक्टर्स" के साथ फाइलनामों को संभालने के लिए बहुत बड़ी लंबाई में जाता है। लेकिन सबसे आसान तरीका है, अगर फ़ाइल के नाम समझदार हैं, तो बस (चेतावनी, बैशवाद!) है।

rm $(< /the/file/with/names)

नियमित शेल के लिए:

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