bash - सभी निर्देशिकाओं (और सामग्री) को हटाएं, लेकिन pwd में फाइलें नहीं


19

मैं सभी निर्देशिकाओं को pwd से निकालना चाहता हूँ, लेकिन फ़ाइलों को pwd में अकेला छोड़ देता हूँ। अगर मेरे pwd की सामग्री है:

mydir1
mydir2
myfile1
myfile2

तो मैं बस के साथ छोड़ दिया जाना चाहते हैं

myfile1
myfile2

मुझे लगता है कि मुझे उपयोग करने की आवश्यकता है rm -r -i

क्या मैं सही हूँ?

जवाबों:


10

जब से आपने कुछ भी निर्दिष्ट नहीं किया है, तो आपको "लापता ऑपरेंड" नहीं दिया जाएगा। *फ़ाइलों के लिए भी एक संकेत देना होगा।

मैं कोशिश करूँगा:

find -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;

mindepth 1को बाहर निकाल देगा .परिणामों से, maxdepth 1निर्देशिका है कि वैसे भी हटाया नहीं जाएगा (इसलिए एक चेतावनी बनाने) के तहत करने का प्रयास कर बाहर निकाल देगा। लेकिन व्यवहार में आप उन दोनों को छोड़ सकते हैं यदि आप कुछ "निर्दोष" चेतावनी के लिए सहमत हैं।


21

मुझे यह कहीं मिला:

rm -r */

जाने का सबसे आसान तरीका लगता है। अपने उदाहरण के साथ, आपको प्रत्येक मामले की पुष्टि करनी होगी, यदि आपके पास 5 फाइलें ठीक हैं, लेकिन बड़ी फाइल संरचनाओं के साथ एक इंटरैक्टिव मोड जाने का रास्ता नहीं है ... बस एक सुझाव के रूप में, यदि यह महत्वपूर्ण जानकारी है, तो बैकअप ...


1
यह भी प्रतीकात्मक लिंक का अनुसरण करेगा, जो शायद यहाँ वांछित नहीं है।
JdeBP

8

उपयोग

rm -rf ./*/

इंटरैक्टिव मोड से बचा जाता है जो आपके स्थानीय निर्देशिका में केवल निर्देशिकाओं को हटा देता है।


जैसा कि JdeBP ने मार्टिन के समान उत्तर पर बताया , यदि वर्तमान (शीर्ष-स्तरीय) निर्देशिका में अन्य निर्देशिकाओं के प्रतीकात्मक लिंक होते हैं, तो उन्हें भी हटा दिया जाएगा (भले ही वे वर्तमान निर्देशिका में या अधीनस्थ नहीं हैं)।
स्कॉट


-1
you can also try in this way to delete only all folders not files from any location in linux.

    #delete only all dir and don't touch files
    #!/bin/bash
    for dir in `ls -l | grep ^d | awk '{print $9}'`
    do
    echo "going to delete $dir " `rm -rf $dir`
    done
    ls
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.