2

Как я могу найти и удалить все файлы .jpg в дереве каталогов, кроме тех, которые содержат "образец" в имени файла?

Например :

a.zip          ->  keep it  
b.jpg          ->  delete it  
a-sample.jpg   ->  keep it  
b-Sample.jpg   ->  keep it  

2 ответа2

7

Удалить все файлы, оканчивающиеся на. jpg (без учета регистра) за исключением файлов с sample в имени файла (без учета регистра:

find . ! -iname '*sample*'  -iname '*.jpg' -delete

Это повторяется по всем каталогам в дереве, начиная с текущего каталога.

Как это устроено:

  • .

    Это указывает, что мы начинаем с текущего каталога.

  • ! -iname '*sample*'

    Это дает команду find игнорировать все файлы с sample в их именах. i in -iname делает этот тест нечувствительным к регистру .

  • -iname '*.jpg'

    Это условие, которое было бы и с предыдущим, ищет файлы, оканчивающиеся на .jpg .

  • -delete

    Это дает команду find удалить все такие файлы.

Перед запуском вышеуказанной команды вы можете протестировать ее. Бежать:

find . ! -iname '*sample*'  -iname '*.jpg'

Это распечатает файлы, представляющие интерес. Если этот список верен, то снова запустите команду с добавленным -delete .

2

В Bash вы можете использовать

shopt -s extglob

чтобы включить отрицательное соответствие:

rm !(*[Ss]ample*).jpg

Чтобы сопоставить подпапки, включите

shopt -s globstar

и используйте двойную звезду:

rm **/!(*[Ss]ample*).jpg

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