Как найти все файлы, которые не являются определенным расширением?

Скажем, я хотел бы удалить каждый файл в каталоге, который не является .png файлом. Я только хотел бы сохранить изображения и удалить все остальное.

Что-то вроде этого, которое, очевидно, не работает:

for file not in *.png;
do
 rm $file
done

Как я пошел бы об этом? Я также хотел бы знать, как сделать это с пользовательскими строками в именах файлов и не просто расширениях.

0
задан 19 January 2020 в 13:04

2 ответа

В ударе с extglob установите Вас, может использовать отрицательное соответствие:

shopt -s extglob # often a default, could be already set
rm *.!(png)
rm !(*keep*|*save*) # everything except files with "keep" or "save" in their name 

Посмотрите здесь для окровавленных деталей.

2
ответ дан 20 January 2020 в 00:34

Это было бы эквивалентным использованием find и отрицание опции соответствия. Я настоятельно рекомендую протестировать результат без -delete сначала.

find . -maxdepth 1 -type f -not -name "*.png" -delete
2
ответ дан 20 January 2020 в 00:34

Другие вопросы по тегам:

Похожие вопросы: