Yanıtlar:
Bash globbing'i uzattı (ilk test, daha sonra yankıyı kaldırın):
shopt -s extglob
echo rm -rf !(A)
shopt | grep ext
Eklentinin etkin olup olmadığını görebilirsiniz.
Ne dersin:
mv A /tmp/
rm * -rf
mv /tmp/A .
Bu, diğer komutlardaki yazım hatası "kıtlığını" önler.
Gibi bir şey
find . -type d -not -name A -exec rm -ir {} \;
yapmak gerekir.
Düzenle
Gerçekten olmalı
find . -type d -maxdepth 1 -not -name A -exec rm -ir {} \;
find
A'nın altında tekrarlanmasını önlemek için.
genellikle ilk önce doğru bir ls komutu çalışarak bunu yapmak. bir unix makinede değilim, ama şöyle bir şey:
ls -lda "[^ A]"
Bir kez doğru olsun, bir komuta boru
ls -lda "[^ A]" | xargs rm -rf
Düzenli ifademi yanlış yapmışsam yukarıdaki düzenlemeyi çekinmeyin ...
İşte bir yol. Bu tür şeylere dikkat edin, ancak o kadar güçlü ki, sadece iyi ya da kötü için kullanılabilir ...
bul * tipi d | grep -v "^ A" | xargs rm -rf
Bazı kişilerin bulmak için -print0 ve -0 ile xargs arasında geçiş yapmadan -exec ve rm ile gösterdikleri için find komutunu kullanmayın. Boşluk veya yeni satır içeren dosya adları üzerinde karışacaktır:
$ 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
Bunun yerine xargs -0, '-exec komutu {} +' ile find -print0 kullanın veya bulmanız destekliyorsa -delete'yi kullanın.
Ayrıca buraya bakınız:
/programming/862388/delete-all-files-directories-except-two-specific-directories