निर्देशिकाओं को हटाने के बिना सभी फ़ाइलों को पुनरावर्ती रूप से निकालें


10

मैं सब डाइरेक्टरीज़ में सभी फ़ाइलों सहित एक डाइरेक्टरी को "क्लीन आउट" करना चाहता हूं, लेकिन मैं सबडायरेक्टरीज को जगह में छोड़ना चाहता हूं। मेरी समझ rm -rयह है कि यह स्वयं उपनिर्देशिकाओं को भी हटा देगा।

मैं छिपी हुई (डॉट) फाइलों को हटाना नहीं चाहता।

यह कैसे किया जा सकता है?


1
find -type f ! -name "[.]*" -deleteउपयुक्त नहीं है?
कोस्टास

मुझे नहीं पता। क्या वह वही है जो मैं पूछ रहा हूं?
स्कॉट विल्सन

बिना कोशिश करें -delete- इसे हटाने के लिए सिर्फ फ़ाइल नाम प्रिंट करें।
कोस्टास

क्या आप छिपी निर्देशिकाओं में फ़ाइलें (छिपी या नहीं) हटाना चाहते हैं?
स्टीफन चेज़लस

निर्देशिकाओं के प्रति सहानुभूति के बारे में क्या?
स्टीफन चेज़लस

जवाबों:


10

findउस के लिए उपयोग करें :

find . ! -name '.*' ! -type d -exec rm -- {} +

1
नहीं सभी कार्यान्वयन मिल गया है-delete
wurtel

3
@RomeoNinov कृपया ओपी प्रश्न पढ़ें:I do not want to delete hidden (dot) files.
जिमीज

1
@ कोस्टस, नहीं, ऐसा कोई शेल नहीं है जिसके लिए भागने की आवश्यकता हो +(कम से कम बॉर्न, सीपी या आरसी परिवारों में नहीं)। एक किंवदंती है जो कहती है कि cshआवश्यक भागने के कुछ पुराने संस्करण हैं {}लेकिन मैं उन पर कभी नहीं आया हूं।
स्टीफन चेज़लस

1
@ScottWilton हिडन निर्देशिकाएं शामिल हैं, लेकिन छिपी हुई निर्देशिकाओं में छिपी हुई फाइलें नहीं। यदि आप छिपी निर्देशिकाओं में सभी फ़ाइलों को अस्वीकार करना चाहते हैं तो find . ! -name '.*' ! -type d ! -path '*/.*'काम करना चाहिए।
जिमीज

1
@ जिमी, अधिक find . -name '.?*' -prune -o ! -type d -exec rm {} +उन जैसे पूरी तरह से उतरने से बचने के लिए। ध्यान दें कि --यहां आवश्यक नहीं है (हालांकि नुकसान नहीं है) क्योंकि पथ के साथ शुरू होता है ./
स्टीफन चेज़लस

0

कुछ इस तरह की कोशिश करो:

find <path> ! -name '.*' -type f -exec rm {} \;

किसी भी कारण से चीजों को गति देने के बजाय एक समय में एक को हटाने के लिए क्यों .... -exec rm {} + ?
एंथन

मैं एक-एक करके चीजें करना पसंद करता हूं। बड़े पैमाने पर (और समानांतर) संचालन में कुछ समय अजीब (और अप्रिय) दुष्प्रभाव होते हैं (जैसा कि आई / ओ सबसिस्टम पर भारी भार पड़ता है)
रोमियो निनोव

1
-exec rm {} +समानांतर नहीं है, यह सिर्फ rmकई फ़ाइल नामों के साथ कहता है । यह कम rmइनवोकेशन चलाता है इसलिए अधिक संसाधन-अनुकूल है। यदि यह इसमें थोड़ा कम सुरक्षित है, तो यह रेस विंडो को बड़ा कर देता है जिसके भीतर फ़ाइलों को हटाने के लिए एक निर्देशिका घटक को एक सिमलिंक में बदला जा सकता है। लेकिन केवल -deleteया -execdir rm {} \;कि पूरी तरह से संबोधित करेंगे।
स्टीफन चेज़लस

@ StéphaneChazelas, इनमें से कोई भी (-delete या -execdir) UNIX में मौजूद नहीं है। और मैं लिनक्स का उल्लेख करने के लिए प्रश्न में नहीं देखता हूं!
रोमियो निनोव

@RomeoNinov, हां मैंने यहां एक अन्य टिप्पणी में कहा कि केवल -execमानक है। -deleteऔर -execdirबीएसडी से आते हैं, जीएनयू ने उन्हें लगभग 10 साल बाद जोड़ा। किसी भी मामले में, जिसका लिनक्स से कोई लेना-देना नहीं है, जो सिर्फ एक कर्नेल है।
स्टीफन चेजलस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.