Как удалить все * .foo в дереве каталогов?
rm -r *.foo
не работает.
Я мог бы попробовать цикл, но это требует рекурсивного расширения:
for x in */*/.../*.foo
do rm $x
done
Что тоже невозможно.
Вы можете использовать find
:
find -name '*.foo' -delete
Предполагая, что у вас довольно свежая версия bash:
shopt -s globstar
rm -- **/*.foo
Вы можете попробовать использовать find:
find /dir/path -name *.foo -exec rm -f {} \;
Одним из самых простых решений было бы использовать команду find с параметром exec
:
find /path/where/to/start/search -type f -name "*.foo" -exec rm {} \;
Это будет искать все файлы с именем * .foo и выполнять rm {имя_файла} для каждого.
Если у вас много файлов, использование команды xargs
может быть быстрее:
find /path/where/to/start/search -type f -name "*.foo" | xargs rm
Это найдет все файлы и поместит имена файлов за командой rm до максимальной длины команды, поддерживаемой вашим дистрибутивом / оболочкой, поэтому при запуске она будет выглядеть так:
rm dir1/file1.foo dir1/file2.foo dir1/file3.foo
Как вы можете себе представить, бинарный файл rm
нужно запускать гораздо реже, что делает его более быстрым вариантом.