-deleteतात्पर्य है -depthकि -prune( -depthपत्तियों के साथ शुरू होता है) के साथ काम नहीं करता है । जीएनयू संस्करण के मैनुअल में इसके बारे में एक चेतावनी है ( -deleteयह एक फ्रीबीएसडी एक्सटेंशन है जो अब जीएनयू findऔर कुछ अन्य कार्यान्वयनकर्ताओं द्वारा भी समर्थित है )।
info find --index-search=-delete
कमांड लाइन पर '-डेलीट' कार्रवाई का उपयोग स्वचालित रूप से '-depth' विकल्प (* नोट फाइंड एक्सप्रेस: :) पर होता है। यह आश्चर्यजनक हो सकता है यदि आप पहले सिर्फ '-प्रिंट' के साथ परीक्षण कर रहे थे, इसलिए आमतौर पर '-epepth' का स्पष्ट रूप से उपयोग करना याद रखना सबसे अच्छा है।
info find --index-search=-prune
चूँकि '-डेलीट' का अर्थ '-डेप' होता है, '-डेलीट' के साथ संयोजन में '-प्र्यून' का उपयोग करने से आपके द्वारा की गई अपेक्षा से अधिक फ़ाइलों के विलोपन हो सकते हैं।
यहां, आपको rmइसके बजाय उपयोग करने का विकल्प मिला है :
find . -name save -prune -o -type f -exec rm -f {} +
(संभावित रूप से असुरक्षित अगर वहाँ निर्देशिका में दूसरों द्वारा लेखन योग्य हैं, क्योंकि आप उस आदेश को चलाते समय सहानुभूति के साथ निर्देशिकाओं को बदलकर वर्तमान निर्देशिका ट्री के बाहर की फ़ाइलों को हटा सकते हैं)।
एक सुरक्षित विकल्प:
find . -name save -prune -o -type f -execdir rm -f -- {} \;
ऊपर बताई गई समस्या नहीं है, लेकिन इसका अर्थ है rmप्रति फ़ाइल एक रनिंग । --FreeBSD कार्यान्वयन, नहीं उपसर्गों फ़ाइल नाम जीएनयू एक है कि साथ के लिए आवश्यक है ./।
वैकल्पिक रूप से, जैसा कि कोस्टास ने सुझाव दिया है:
LC_ALL=C find . ! -name save ! -path '*/save/*' -type f -delete
(लेकिन यह अभी भी अनावश्यक रूप से saveनिर्देशिकाओं में उतरता है )
ऐसा LC_ALL=Cहै तो *बाइट्स के किसी भी क्रम से मेल खाता है (यहां तक कि जो वर्तमान स्थान में वैध वर्ण नहीं बनाते हैं)। ध्यान दें कि यह त्रुटि संदेशों की भाषा (उपयोगकर्ता की भाषा के बजाय अंग्रेजी) को प्रभावित करेगा।
mv save/ ../some/safer/locationइस तरह के "जेनेरिक" डिलीट कमांड (... लेकिन निश्चित रूप से, आपके पोस्ट से पहले मैंने एक ही चेक किया था और एक ही मुसीबत में भाग गया था) से पहले एक साधारण सलाह देता हूं । अब फाइल्स सिस्टम के लिए एक अच्छी "अनडिलीट" ढूंढिए। फाइल्स ^ ^ पर थीं