मैं यह धारणा थी किऔर उसके बच्चों
rm -r *.xml
माता-पिता और बच्चे तथापि से सभी फ़ाइल को हटा जाएगा:
*.xml: No such file or directory
मैं यह धारणा थी किऔर उसके बच्चों
rm -r *.xml
माता-पिता और बच्चे तथापि से सभी फ़ाइल को हटा जाएगा:
*.xml: No such file or directory
rm मैन ऑफ द पेज का कहना है:
-r, -R, --recursive
remove directories and their contents recursively
इसका मतलब यह है झंडा -r
एक निर्देशिका उम्मीद कर रही है। लेकिन *.xml
एक निर्देशिका नहीं है। हालांकि यह एक कम यूनिक्स प्रणालियों में समर्थित है,
find . -name "*.xml" -type f|xargs rm -f
मैं आप चाहते हैं यह सोचते हैं रहा हूँ सभी *.xml
फ़ाइलों को दोबारा हटाने के लिए (वर्तमान और सभी उप निर्देशिकाओं के भीतर)। ऐसा करने के लिए, find
का उपयोग करें:
find . -name "*.xml" -exec rm {} \;
एक तरफ ध्यान दें पर, पुनरावर्ती विलोपन मुझे डराता है। (बिना -exec
बिट)
find . -name "*.xml"
बस देखने के लिए क्या छलांग लेने से पहले हटा दिया जाता है हो सकता है: मेरी saner के दिनों में, मैं के साथ कि कदम पूर्व में होना करने के लिए जाते हैं। मुझे सलाह है कि आप वही करते हैं। आपकी फाइलें आपको धन्यवाद देंगे।
यूप कुछ अलग-अलग प्रकार के लिए ऐसा करना चाहता है। हालांकि आपकी स्क्रिप्ट बैश के भीतर काम नहीं कर रही है। – Will
आउटपुट क्या है? – paulmelnikow
आपको '{}' से बचने की आवश्यकता नहीं है - मूल संस्करण ठीक था - ओपी शायद इसे गलत टाइप किया गया था। –
अधिक सुंदर तरीका:
आप रिकर्सिवली नीचे वर्तमान निर्देशिका से सभी .xml फ़ाइलें निकालना चाहते हैं आदेश है
rm -rf */*.xml
यह आपके मौजूदा निर्देशिका की सभी उप-निर्देशिकाओं से xml फ़ाइलों को हटा देगा।
यह काम उन पेड़ों के लिए होगा जो केवल 2 स्तरों से गहरे हैं? –
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
करने का एक आसान तरीका
rm -f * .xml
यह वर्तमान निर्देशिका से सभी .xml फ़ाइलें निकाल देंगे।
बचाव के लिए जेडएसएच रिकर्सिव ग्लोबिंग!
आह्वान zsh: zsh
सुनिश्चित करें कि आप निर्देशिका में हैं आप में होना करने का इरादा रहें: cd wherever
पहले सूची: ls **/*.xml
निकालें: rm **/*.xml
मैं bash
, और जू पर बैश करने के लिए मजबूत प्रलोभन का विरोध करूंगा विषय here पर प्रासंगिक zsh दस्तावेज़ों के लिए बिंदु बिंदु।
xargs का आह्वान करने की कोई आवश्यकता नहीं है; 'find -exec' का उपयोग करें। – paulmelnikow
@ नोआ..आई पता है ... यूनिक्स में इसी तरह की चीज करने के कई तरीके हैं। ओपी तक यह चुनने के लिए कि किस का उपयोग करना है। मैंने अभी जो कुछ भी नियमित रूप से उपयोग किया था, मैंने उसे दिया था। – Vijay
@ नोआ वास्तव में 'xargs' अधिक कुशल है। प्रत्येक मिलान फ़ाइल के लिए '-exec' कॉल 'आरएम', जबकि' xargs' बैचों में करता है। बहुत सारी फाइलें होने पर इससे बड़ा अंतर हो सकता है। – suvayu