+1 за то, что делаешь вменяемое, вместо того чтобы надеяться, что инструменты достаточно умны. Тем не менее, однажды ночью, когда я только изучал Linux, я скопировал ядро в / tmp перед выполнением моей первой перекомпиляции. она не удалась, но стерла старую, поэтому я сказал «нет пота, у меня есть копия», только чтобы обнаружить, что задача cron в полночь стерла его с каждым файлом, который более недели назад находился в / tmp! Я должен был перекомпилировать снова и на этот раз сделать все правильно, или нет перезагрузки для меня!
Хавьер
лучший ответ размещен :)
Уоррен
3
Что-то типа
find .-type d -not -name A -exec rm -ir {} \;
стоит сделать.
редактировать
Это действительно должно быть
find .-type d -maxdepth 1-not -name A -exec rm -ir {} \;
Не используйте find, как некоторые люди показали с -exec и rm, не передавая -print0 для поиска и -0 для xargs. Это будет путать в именах файлов с пробелами или символами новой строки:
$ 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 command {} +' или -delete, если ваш поиск поддерживает это.
shopt | grep ext
вы можете увидеть , если плагин включен.источник
Что о:
Это позволяет избежать некоторой «шаткости» опечатки в других командах.
источник
Что-то типа
стоит сделать.
редактировать
Это действительно должно быть
чтобы предотвратить
find
повторение ниже A.источник
Я обычно делаю это, работая над командой ls, которая в первую очередь понимает это правильно. я не на Unix-машине, но что-то вроде:
ls -lda "[^ A]"
Как только вы поймете это правильно, направьте его в команду
ls -lda "[^ A]" | xargs rm -rf
Не стесняйтесь редактировать выше, если я неправильно понял свое регулярное выражение ...
источник
Если вы хотите быть более гибким, но ручным, вы можете сделать:
Таким образом, вы можете сделать общий мангинг.
источник
Вот один из способов. Будьте осторожны с такими вещами, хотя, они настолько мощные, что их можно использовать только для добра или зла ...
источник
Не используйте find, как некоторые люди показали с -exec и rm, не передавая -print0 для поиска и -0 для xargs. Это будет путать в именах файлов с пробелами или символами новой строки:
Вместо этого используйте find -print0 с xargs -0, '-exec command {} +' или -delete, если ваш поиск поддерживает это.
источник
Смотрите также здесь:
/programming/862388/delete-all-files-directories-except-two-specific-directories
источник
В дополнение к более раннему примеру:
Вы также можете сделать:
чтобы избежать необходимости в
cd some/subdir
первую очередь.источник