Я пытаюсь find
удалить файлы в текущем каталоге и подкаталогах (рекурсивно), которые соответствуют разным шаблонам, и вывести соответствующие файлы, чтобы stdout
узнать, какие из них удалены.
Например, я хочу найти все файлы, начинающиеся с '&' и все файлы, начинающиеся и заканчивающиеся на '$'.
Я пробовал использовать:
find . -type f -name '&*' -or -type f -name '$*$' -exec rm -v {} \;
но rm
применяется только к последнему совпадению ('$*$').
Таким образом, я пробовал:
find . -type f -name '&*' -or -type f -name '$*$' -delete
Но это не только соответствует только последнему шаблону, но и не выводит удаленные файлы.
Я знаю, что могу сделать это:
rm -v ``find -type f -name '&*' -or -type f -name '$*$'``
но мне бы очень хотелось избежать такого подхода и действовать командно find
.
Есть какие-нибудь советы?
Спасибо заранее.
решение1
Ваша проблема в том, чтоисполнительныйприменимо только ко второму шаблону, попробуйте заключить условия поиска в скобки, чтобы это исправить:
find . \( -type f -name '&*' -or -type f -name '$*$' \) -exec rm -v {} \;
Стоит отметить, что это не ошибка, а фича, так что вы можете сделать что-то вроде этого:
find -type f -name '&*' -exec mv '{}' ./backup ';' -or -type f -name '$*$' -exec rm -v '{}' ';'
Если вам нужно
решение2
Хотядирижабльответ правильный, я также нашел это решение:
найти . -тип f \( -имя '&*' -или -имя '$*$' \) -печать -удалить