2

Как рекурсивно удалить файлы, содержащие тильду в имени файла или расширении?

Например, файлы vim с такими именами, как .my_file.c.un~?

Я использую эту последовательность поиска для этого:

find . -name "*.un~" -o -name "*.swo" -o -name "*.swp" -exec rm -f {} \;

Но это не удаляет файлы. По-прежнему работает только чистая find отображающая список файлов правильно:

./.my_file.c.un~
./.my_file.c.swp
./.file2.c.un~

Кроме того, удаление их с помощью чистого rm -f .my_file.c.un~ работает отлично. Изменение -exec rm -f {} \; в- -delete все еще не помогает.

1 ответ1

4

Когда вы используете несколько логических операций, вам нужно сгруппировать их в скобки, как показано ниже:

find . \( -name "*.un~" -o -name "*.swo" -o -name "*.swp" \) -delete

где вы должны либо поставить обратную косую черту или заключить в скобки ('(' ... ')'), чтобы избежать разбора этих специальных символов оболочкой.

В приведенном выше примере я использую -delete вместо -exec rm -f {} который автоматически удаляет файл, поэтому вам не нужно беспокоиться о файлах с пробелами, в противном случае это может оказаться для вас плохим .

Для большего количества примеров синтаксиса, проверьте man find .

Смотрите также:

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