Удалить соответствующие файлы во всех подкаталогах
Как я могу удалить все .swp файлы во всех моих подкаталогах под Linux?
Удалите все файлы *.swp под текущей директорией, используйте команду find
в одной из следующих форм:
find . -name \*.swp -type f -delete
Опция -delete
означает, что поиск напрямую удалит соответствующие файлы. Это наилучшее совпадение с фактическим вопросом ОП.
Использование -type f
означает, что поиск будет обрабатывать только файлы.
find . -name \*.swp -type f -exec rm -f {} \;
find . -name \*.swp -type f -exec rm -f {} +
Опция -exec
позволяет найти выполнение произвольной команды для каждого файла. В первом варианте команда будет выполняться один раз на файл, а во втором будет выполняться как можно меньше команд, заменяя {}
на как можно большее количество параметров.
find . -name \*.swp -type f -print0 | xargs -0 rm -f
Сопряжение вывода в xargs
используется в виде более сложных команд для каждого файла, чем это возможно при -exec
. Опция -print0
говорит find
разделить совпадения с ASCII NULL вместо новой строки, а -0
говорит xargs
ожидать NULL-разделенный вход. Это делает конструкцию трубопровода безопасной для имен файлов, содержащих пробелы.
Подробности и примеры см. в разделе man find
.
Для поиска в своем домашнем каталоге (и с помощью GNU ‘find’ и ‘xargs’) я бы воспользовался:
find $HOME -name '*.swp' -print0 | xargs -0 rm -f
Использование ‘-print0
’ и ‘-0
’ означает, что имена будут разделены символами ASCII NUL ‘\0’, и это будет обрабатывать пути файлов с пробелами и т.д. в именах. Если вы думаете, что у вас могут быть каталоги (или файлы устройств, или FIFO, или другие не-файлы) под вашим каталогом, заканчивающимся на ‘.swp’, вы можете добавить опцию ‘-type f
’, чтобы ‘найти’. Если у вас есть только каталоги, команда выше не сможет их шумно удалить.
Если вы хотите удалить все файлы из всех подпапок, вы можете воспользоваться предоставленной командой,
$ find . -name \* -type f -delete