Удалить все подкаталоги, кроме одного

Удалить все подкаталоги, кроме одного

Предположим, что в текущем каталоге имеется несколько подкаталогов, один из которых называется 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

Если я неправильно написал регулярное выражение, можете смело редактировать текст выше...

Связанный контент