संभव डुप्लिकेट:
कुछ को छोड़कर एक निर्देशिका में सभी फ़ाइलों को हटाने के लिए कैसे?
Unix में सभी लेकिन एक (या कुछ) फ़ाइल को कैसे हटाएं?
कुछ इस तरह
rm -rf -ignore myfile.txt *
संभव डुप्लिकेट:
कुछ को छोड़कर एक निर्देशिका में सभी फ़ाइलों को हटाने के लिए कैसे?
Unix में सभी लेकिन एक (या कुछ) फ़ाइल को कैसे हटाएं?
कुछ इस तरह
rm -rf -ignore myfile.txt *
जवाबों:
ls * | grep -v dont_delete_this_file | xargs rm -rf
उदाहरण :
mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
'Test2' को छोड़कर सभी फाइलों को हटाने के लिए:
ls * | grep -v test2 | xargs rm -rf
तब 'ls' आउटपुट है:
test2
संपादित करें:
टिप्पणी के लिए धन्यवाद। यदि निर्देशिका में रिक्त स्थान वाली कुछ फ़ाइलें हैं:
mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
आप उपयोग कर सकते हैं (बैश के साथ):
rm !("test 1"|"test 4")
'ls' आउटपुट:
test 1
test 4
ls -1 | grep -v do_not_delete | xargs -I files rm "files"
यह पृष्ठ शेल के आधार पर विभिन्न प्रकार के विकल्प देता है: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
एक पुनरावर्ती के लिए rm
आपको इसके साथ पुनरावृत्ति करने की आवश्यकता होगी find
और उस फ़ाइल को बाहर रखें जिसे आप रखना चाहते थे (या) grep
, लेकिन यह आपको व्हाट्सएप मुसीबत में डाल सकता है)। एक शेल ग्लोब के लिए, आधुनिक शेल में ग्लोब पैटर्न होते हैं जिनका उपयोग फ़ाइलों को बाहर करने के लिए किया जा सकता है; यह उपलब्ध होने पर शेल-स्तरीय ग्लोब पुनरावृत्ति के साथ जोड़ा जा सकता है (जैसे। zsh
है rm **/*~foo/bar
- ध्यान दें कि यह बड़ी निर्देशिका पेड़ों के लिए तर्क लंबाई सीमा में चलने की संभावना है)।