-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
इस तरह के "जेनेरिक" डिलीट कमांड (... लेकिन निश्चित रूप से, आपके पोस्ट से पहले मैंने एक ही चेक किया था और एक ही मुसीबत में भाग गया था) से पहले एक साधारण सलाह देता हूं । अब फाइल्स सिस्टम के लिए एक अच्छी "अनडिलीट" ढूंढिए। फाइल्स ^ ^ पर थीं