2013-01-12 14 views
7

साथ फ़ाइलों को हटा दें मैं ओएस एक्स में यह करने के लिए करना चाहते हैं:ओएस एक्स: सूची और रिक्त स्थान

ls -rt | xargs rm -i 

हालांकि, rm तथ्य फ़ाइलों में से कुछ व्हाइटस्पेस है पर घुट रहा है।

मैं ओएस एक्स का उल्लेख करता हूं क्योंकि ls के बीएसडी के संस्करण में -Q ध्वज नहीं है।

find -print0 का उपयोग किए बिना ऐसा करने का कोई तरीका है?

उत्तर

0

इस

while read -u 3 
do 
    rm -i "$REPLY" 
done 3< <(ls -rt) 
+0

मान लीजिए कि 'ls' आउटपुट पार्सिंग स्वीकार्य है और फ़ाइलों की संख्या कम है, यह अच्छी तरह से काम करता है, सिवाय इसके कि कस्टम फ़ाइल डिस्क्रिप्टर' 3' की आवश्यकता नहीं है; '-<(ls -rt)' और 'read' बिना '-u 3' के' होगा। इसके अलावा, पूरी तरह से मजबूत होने के लिए, 'read -r', बैकलैश की व्याख्या से बचने के लिए उपयोग किया जाना चाहिए। 'Xargs-i {}' दृष्टिकोण के लिए – mklement0

0

बस इसे आपके लिए हटाएं।

find . -print -depth 1 -exec rm -i {} \; 

यह अधिक लचीला है, रिक्त स्थान के साथ ठीक होना चाहिए।

2
[[email protected] staCK]$ touch "file name"{1..5}.txt 
[[email protected] staCK]$ ls -1 
file name1.txt 
file name2.txt 
file name3.txt 
file name4.txt 
file name5.txt 
[[email protected] staCK]$ ls -rt | xargs -I{} rm -v {} 
removed `file name5.txt' 
removed `file name4.txt' 
removed `file name3.txt' 
removed `file name2.txt' 
removed `file name1.txt' 

या

[[email protected] staCK]$ ls -1 
file a 
file b 
file c 
file d 

[[email protected] staCK]$ OLDIFS=$IFS; IFS=$'\n'; for i in `ls -1` ; do rm -i $i ; done ; IFS=$OLDIFS 
rm: remove regular empty file `file a'? y 
rm: remove regular empty file `file b'? y 
rm: remove regular empty file `file c'? y 
rm: remove regular empty file `file d'? y 
+0

++; दूसरा दृष्टिकोण शाब्दिक फ़ाइल नामों को (आकस्मिक) ग्लोबिंग के अधीन बनाता है, जब तक कि आप 'set -f' (और बाद में इसे पुनर्स्थापित नहीं करते) के साथ ग्लोबिंग बंद कर देते हैं। – mklement0

1

आप सभी फाइलों को डिलीट करना चाहते हैं, क्या rm -i * साथ कुछ गड़बड़ है का प्रयास करें?

Don't parse ls

0

आपके पास दो विकल्प। आप -0 विकल्प है, जो NUL अक्षरों का उपयोग (\0) तर्कों में इनपुट विभाजन डिलीमीटर के रूप में साथ xargs कॉल कर सकते हैं या तो:

ls -rt | tr '\n' '\0' | xargs -0 rm -i 

या आप मैं विकल्प का उपयोग कर सकते हैं केवल नई-पंक्तियों पर इनपुट विभाजित करने के लिए (\n) और इनपुट की प्रत्येक पंक्ति में एक बार वांछित आदेश फोन:

ls -rt | xargs -I_ rm -i _ 

अंतर यह है कि पहले संस्करण केवल rm कॉल एक बार, सभी एक ही सूची के रूप में प्रदान किए गए तर्कों के साथ है, जबकि दूसरा एक rm व्यक्तिगत रूप से कहता है इनपुट में प्रत्येक पंक्ति के लिए।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^