Удалить несколько шаблонов файлов с помощью одной команды (find)

Удалить несколько шаблонов файлов с помощью одной команды (find)

Я пытаюсь 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 \( -имя '&*' -или -имя '$*$' \) -печать -удалить

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