Как удалить файлы, используя параметр поиска с несколькими именами?

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 все еще не помогает

Anton Kochkov
источник

Ответы:

3

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

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

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

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

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

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

kenorb
источник