जवाबों:
बैश ने ग्लोबिंग (पहले परीक्षण, फिर प्रतिध्वनि हटाएं) बढ़ाया है:
shopt -s extglob
echo rm -rf !(A)
shopt | grep extआप अगर प्लगइन सक्षम होने पर देख सकते हैं।
find -maxdepth 1 -type d -not -name A -not -name "." -exec rm -ir {} \;
व्हाट अबाउट:
mv A /tmp/
rm * -rf
mv /tmp/A .
यह अन्य कमांड्स में टाइपो के कुछ "घबराहट" से बचा जाता है।
कुछ इस तरह
find . -type d -not -name A -exec rm -ir {} \;
करना चाहिए।
संपादित करें
यह वास्तव में होना चाहिए
find . -type d -maxdepth 1 -not -name A -exec rm -ir {} \;
findए से नीचे आने से रोकने के लिए ।
मैं आमतौर पर एक ls कमांड पर काम करके ऐसा करता हूं जो इसे पहले प्राप्त करता है। मैं यूनिक्स मशीन में नहीं हूँ, लेकिन कुछ इस तरह है:
ls -lda "[^ A]"
एक बार जब आप इसे सही कर लेते हैं, तो इसे एक कमांड पर पाइप करें
ls -lda "[^ A]" | xargs rm -rf
अगर मुझे मेरी नियमित अभिव्यक्ति गलत लगी है तो ऊपर संपादित करने के लिए स्वतंत्र महसूस करें ...
यहाँ एक तरीका है। इस तरह की बातों से सावधान रहें, हालांकि, यह इतना शक्तिशाली है कि इसका इस्तेमाल केवल अच्छे या बुरे के लिए ही किया जा सकता है ...
खोजें * -टाइप डी | grep -v "^ ए" | xargs rm -rf
कुछ लोगों द्वारा -exec और rm को दिखाए बिना पास -प्रिंट0 और खोजने के लिए -0 xargs के साथ उपयोग न करें। यह रिक्त स्थान या newlines के साथ फ़ाइल नामों पर भ्रमित हो जाएगा:
$ mkdir 'foo foo'
$ mkdir foo$'\n'foo
$ find . -type d -exec rm -ir {} \;
rm: cannot remove directory `.'
rm: remove directory `./foo\nfoo'? y
find: `./foo\nfoo': No such file or directory
rm: remove directory `./foo foo'? y
find: `./foo foo': No such file or directory
इसके बजाय find -print0 का उपयोग xargs -0, '-exec कमांड {} +', या -delete के साथ करें यदि आपका खोज इसका समर्थन करता है।