मूल फ़ोल्डर को हटाने के बिना सबफ़ोल्डर हटाएं


15

इस प्रकार की dir संरचना के लिए:

/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...

मुझे पता है कि मैं rm -rf /config/filesgroupsमूल फ़ोल्डर और सभी उप-फ़ोल्डर को हटाने के लिए उपयोग कर सकता हूं ...

लेकिन मैं केवल हटाना चाहते हैं /filegroupA, /filegroupB, आदि, और हटा नहीं/config/filegroups


13
क्या rm -rf / config / filesgroups / * का उपयोग करने में कोई समस्या है?
dsmsk80

3
या शायद भी rm -rf /config/filegroups/filegroups{A,B}?
द्रविण स्लोअन

@dsumsky डिफ़ॉल्ट रूप से bash'शामिल नहीं है।' pathname विस्तार में फ़ोल्डर। जो वांछित हो या न हो। अपने आप को मैं क्या shopt -s dotglobमें .bashrcहै कि ठीक करने के लिए। बस एक पक्ष ध्यान दें कि किसी को उपयोगी मिल सकता है;)।
मिरोस्लाव कोसकर

क्या आपके लिए कोई ओ फथी काम करता था? यदि ऐसा है, तो क्या आप दूसरों की मदद करने के लिए (मुझे पसंद) जो एक ही काम करना चाहते हैं, एक उत्तर को स्वीकार करने का मन करेगा?
मावग का कहना है कि मोनिका

rm -rf /*करेंगे;) --- गंभीरता से न करें
मुहम्मद उमेर

जवाबों:


28
rm -rf /config/filegroups/*

यदि आप केवल निर्देशिकाओं को हटाना चाहते हैं (और निर्देशिकाओं के लिए सहानुभूति रखते हैं), तो किसी भी फाइल को /config/filegroupsअछूता में छोड़ कर, आप एक ट्रैफ़िक स्लैब का उपयोग कर सकते हैं:

rm -rf /config/filegroups/*/

यदि आप एक .अच्छी तरह से शुरू होने वाले नामों के साथ निर्देशिकाओं को हटाना चाहते हैं , तो आपको लगता है कि आपके पास हाल ही में बैश है, आपको डॉटग्लोब शेल विकल्प का उपयोग करना चाहिए:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob

और कृपया ऐसा न करें कि यह rm -rf "/ config / filegroups / *" के लिए काम नहीं करेगा
Ilya Yevlampiev

5

यह /config/filegroups"छिपी" फ़ाइलों और निर्देशिकाओं (नाम से शुरू होने वाले नाम .) सहित सभी फाइलों और निर्देशिकाओं को हटा देगा ।

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf

यदि फ़ाइल या निर्देशिका नामों में रिक्त स्थान हैं, तो आपको इसे इस तरह करना होगा:

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

बोनस: आप पहले जांच सकते हैं कि इस तरह से क्या हटाया जा रहा है:

find /config/filegroups -mindepth 1 -maxdepth 1

यदि आप कुछ फ़ाइलें या निर्देशिकाएँ रखना चाहते हैं, तो आप इसे इस तरह कर सकते हैं:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"

वहाँ किसी भी कारण से उपयोग करने के लिए नहीं है findके -deleteविकल्प?
evilsoup

4
-deleteगैर खाली निर्देशिका को हटाने से इंकार कर दिया। -maxdepthओवरराइड्स -depth, जिन्हें -deleteगैर खाली निर्देशिकाओं को हटाने की आवश्यकता होती है । बिना -maxdepthआप आसानी से नहीं देख सकते हैं कि कौन सी निर्देशिकाओं को हटाया जा रहा है क्योंकि यह निर्देशिकाओं के अंदर की फाइलों को भी सूचीबद्ध करता है। उपयोग नही कर रहा-maxdepth अर्थ है कि आप आसानी से फ़िल्टर का उपयोग नहीं कर सकते हैं -name। इसके अलावा -delete, पहले सभी वस्तुओं को हटाकर निर्देशिकाओं को हटा दिया जाता है, जो कि एक बड़ा और गहरा पेड़ होने में लंबा समय ले सकता है।
lesmana

4

मैं इसके findसाथ प्रयोग करना पसंद करता हूं -exec, इससे आपकी कॉल कुछ इस तरह होगी:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;

-2

यदि आप पहले से ही फ़ोल्डर में हैं तो आप बस टाइप कर सकते हैं rm -rf ./**

इसलिए:

cd /config/filesgroups
rm -rf ./**

यह स्थानीय पथ से सभी सबफ़ोल्डर्स को हटाने के लिए एक शानदार पैटर्न है।

./स्थानीय फ़ोल्डर का उल्लेख ... और **सभी फ़ोल्डर के नीचे ..


1
कौन सा फ़ोल्डर, और क्यों `**` `
राल्फफ्राइडल

1
यह बिलकुल वैसा ही होगा rm -rf ./*, सिवाय इसके कि आपको "कोई ऐसी फाइल या निर्देशिका नहीं" के बारे में नैदानिक ​​संदेश मिलने की संभावना है, यदि आप -fअपने आदेश में उपयोग नहीं कर रहे हैं (क्योंकि इसकी सामग्री संसाधित होने से पहले शीर्ष-सबसे निर्देशिका को पुन: हटा दिया जाएगा। द्वारा rm)।
Kusalananda
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.