
Предположим, что в текущем каталоге имеется несколько подкаталогов, один из которых называется A.
Как удалить все подкаталоги, кроме A, с помощью Bash?
решение1
Bash имеет расширенную подстановку (сначала протестируйте, затем удалите echo):
shopt -s extglob
echo rm -rf !(A)
решение2
find -maxdepth 1 -type d -not -name A -not -name "." -exec rm -ir {} \;
решение3
Как насчет:
mv A /tmp/
rm * -rf
mv /tmp/A .
Это позволяет избежать некоторых «пугающих» опечаток в других командах.
Пожалуйста, будьте осторожныне находиться в корневой папке (/) при запуске команды rm * -rf выше.
решение4
Я обычно делаю это, создавая команду ls, которая сначала все делает правильно. Я не за машиной Unix, но что-то вроде этого:
ls -lda "[^A]"
Как только вы сделаете это правильно, передайте это в команду
ls -lda "[^A]" | xargs rm -rf
Если я неправильно написал регулярное выражение, можете смело редактировать текст выше...