На этот вопрос уже есть ответ здесь:
Я хочу удалить все Файлы .ppm и .png в текущем каталоге. Поэтому после проверки некоторых веб-страниц об использовании команды "find" в Интернете я набрал следующую команду:
find . -type f \( -iname ".png" -o -iname ".ppm \) -exec rm {} \;
, но Терминал просто показал
>
и не сделал Что-нибудь не так.
Вы просто забыли закрывать заключенную в кавычки строку с a "
после ".ppm
.
>
Вы видите, вторичная подсказка Bash, как определено $PS2
переменная среды. Вы получаете его при вводе фрагмента команды, который, как предполагается, продолжается (как, например, потому что это имеет открытую заключенную в кавычки строку или отсутствие done
или fi
ключевое слово...), но нажимают Enter для создания разрыва строки.
Другая вещь - это -iname ".png"
только (нечувствительно к регистру) соответствовал бы файлам точному имени ".png". То, что Вы хотите, должно соответствовать всем файлам, заканчивающимся ".png", таким образом, условие должно быть -iname "*.png"
вместо этого. То же для ".ppm", конечно.
Так корректное find
команда была бы:
find . -type f \( -iname "*.png" -o -iname "*.ppm" \) -exec rm {} \;
Однако я обычно рекомендовал бы сухое выполнение это без -exec rm {} \;
сначала и проверка список файлов снова для правильности, прежде на самом деле позволить ему удалить материал без дальнейшего подтверждения.
Кроме того, как правильно указано в комментариях, Вы можете и вероятно должны заменить -exec rm {} \;
с -delete
позволять find
обработайте удаление внутренне.
Вам не нужно find
для этого. Вместо этого можно работать
rm *{.png,.ppm}
в каталоге.