2011-08-17 15 views
25

मैं यह धारणा थी किऔर उसके बच्चों

rm -r *.xml 

माता-पिता और बच्चे तथापि से सभी फ़ाइल को हटा जाएगा:

*.xml: No such file or directory 

उत्तर

39

rm मैन ऑफ द पेज का कहना है:

-r, -R, --recursive 
      remove directories and their contents recursively 

इसका मतलब यह है झंडा -r एक निर्देशिका उम्मीद कर रही है। लेकिन *.xml एक निर्देशिका नहीं है। हालांकि यह एक कम यूनिक्स प्रणालियों में समर्थित है,

find . -name "*.xml" -type f|xargs rm -f 
+4

xargs का आह्वान करने की कोई आवश्यकता नहीं है; 'find -exec' का उपयोग करें। – paulmelnikow

+1

@ नोआ..आई पता है ... यूनिक्स में इसी तरह की चीज करने के कई तरीके हैं। ओपी तक यह चुनने के लिए कि किस का उपयोग करना है। मैंने अभी जो कुछ भी नियमित रूप से उपयोग किया था, मैंने उसे दिया था। – Vijay

+6

@ नोआ वास्तव में 'xargs' अधिक कुशल है। प्रत्येक मिलान फ़ाइल के लिए '-exec' कॉल 'आरएम', जबकि' xargs' बैचों में करता है। बहुत सारी फाइलें होने पर इससे बड़ा अंतर हो सकता है। – suvayu

24

मैं आप चाहते हैं यह सोचते हैं रहा हूँ सभी *.xml फ़ाइलों को दोबारा हटाने के लिए (वर्तमान और सभी उप निर्देशिकाओं के भीतर)। ऐसा करने के लिए, find का उपयोग करें:

find . -name "*.xml" -exec rm {} \; 

एक तरफ ध्यान दें पर, पुनरावर्ती विलोपन मुझे डराता है। (बिना -exec बिट)

find . -name "*.xml" 

बस देखने के लिए क्या छलांग लेने से पहले हटा दिया जाता है हो सकता है: मेरी saner के दिनों में, मैं के साथ कि कदम पूर्व में होना करने के लिए जाते हैं। मुझे सलाह है कि आप वही करते हैं। आपकी फाइलें आपको धन्यवाद देंगे।

+0

यूप कुछ अलग-अलग प्रकार के लिए ऐसा करना चाहता है। हालांकि आपकी स्क्रिप्ट बैश के भीतर काम नहीं कर रही है। – Will

+0

आउटपुट क्या है? – paulmelnikow

+0

आपको '{}' से बचने की आवश्यकता नहीं है - मूल संस्करण ठीक था - ओपी शायद इसे गलत टाइप किया गया था। –

2

अधिक सुंदर तरीका:

आप रिकर्सिवली नीचे वर्तमान निर्देशिका से सभी .xml फ़ाइलें निकालना चाहते हैं आदेश है

rm -rf */*.xml 

यह आपके मौजूदा निर्देशिका की सभी उप-निर्देशिकाओं से xml फ़ाइलों को हटा देगा।

+0

यह काम उन पेड़ों के लिए होगा जो केवल 2 स्तरों से गहरे हैं? –

3

this answer on finding empty directories unix पढ़ना, मैं सिर्फ -delete कार्रवाई के बारे में सीखा:

-delete 
      Delete files; true if removal succeeded. If the removal failed, an error message is issued. If -delete fails, find's exit status will be nonzero (when it even‐ 
      tually exits). Use of -delete automatically turns on the -depth option. 

      Warnings: Don't forget that the find command line is evaluated as an expression, so putting -delete first will make find try to delete everything below the start‐ 
      ing points you specified. When testing a find command line that you later intend to use with -delete, you should explicitly specify -depth in order to avoid 
      later surprises. Because -delete implies -depth, you cannot usefully use -prune and -delete together. 

स्रोत: आदमी को खोजने

इसका मतलब है कि, आप भी इस तरह रिकर्सिवली सभी एक्सएमएल-फ़ाइलें हटा सकते हैं:

find . -name "*.xml" -type f -delete 
0

करने का एक आसान तरीका

rm -f * .xml

यह वर्तमान निर्देशिका से सभी .xml फ़ाइलें निकाल देंगे।

0

बचाव के लिए जेडएसएच रिकर्सिव ग्लोबिंग!

आह्वान zsh: zsh

सुनिश्चित करें कि आप निर्देशिका में हैं आप में होना करने का इरादा रहें: cd wherever

पहले सूची: ls **/*.xml

निकालें: rm **/*.xml

मैं bash, और जू पर बैश करने के लिए मजबूत प्रलोभन का विरोध करूंगा विषय here पर प्रासंगिक zsh दस्तावेज़ों के लिए बिंदु बिंदु।

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