Я хотел бы rm все файлы, оканчивающиеся на ~ как в моем текущем каталоге, так и во всех каталогах внутри моего текущего каталога. У меня сложилось впечатление, что флаг -r или -R сделает это; однако следующие команды удаляют только файлы, оканчивающиеся на ~ в моем текущем каталоге, а не другие каталоги в моем текущем каталоге:

rm *~ -r
rm *~ -R

Можно ли заставить rm работать так, как я хочу, как описано здесь, и если да, то как?

Я использую tcsh.

2 ответа2

4

Совместимый подход состоит в том, чтобы указать find создать список файлов и передать его в rm . Использование синтаксиса newish (добавленного в POSIX около 2005 года, если память будет работать) -exec ... {} + сделает это эффективным и безопасным:

find . -name '*~' -exec rm -f {} +

Для более новой (4.x) bash или большинства выпусков zsh вы также можете указать оболочке выполнить рекурсивное сглаживание:

shopt -s globstar # enable recursive globbing with ** on bash
rm -f **/*~
0

Вы можете удалить все файлы из каждого каталога, используя следующую команду:

find -name "*~" -print0 | xargs -0 rm

где find -name "* ~" находит каждый файл с именем "~" в последней позиции, -print0 выводит список всех файлов в одну строку, xargs -0 rm, который принимает список всех файлов на входе и работает как rm , И если вы хотите даже удалить все каталоги, имена которых имеют в конце символ «~», то вы также можете сделать это, заменив rm на rm -rf.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .