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

Быстрым и простым решением для командной строки было бы

cd <dir>find . -type f -iname \*.jpg -delete
  • . указывает начать поиск в текущей папке.
  • -type f сообщает find только для поиска файлов.
  • -iname делает поиск нечувствительным к регистру.
  • -delete сообщает find удалить /удалить все найденные файлы.

осторожно! Я рекомендую выполнить команду без -delete сначала, чтобы получить список файлов, которые будут удалены, когда -delete включен в команду. Таким образом, небольшая опечатка не удалит ничего, чего вы не собирались делать.

Для получения дополнительной информации о том, как использовать find и что он может сделать, смотрите man find

Обратите внимание, что find не будет выдавать никаких выходных данных, когда -delete используется.

Что касается комментария о нескольких расширениях

find . -type f \( -name \*jpg -o -name \*png \) -delete

  • ( .. ) Групповое выражение. Должен быть экранирован из оболочки, следовательно \( .. \) в примере
  • -o логический или

Таким образом, приведенный выше пример будет соответствовать любому файлу, который имеет либо jpg или png в конце его названия. Таким же образом можно добавить дополнительные расширения. Просто убедитесь, что помните -o между каждым -name заявление, если -o не указано find по умолчанию будет установлено значение -a (и), который не будет работать, поскольку файл не может заканчиваться на обоих jpg и png в то же время.

Попробуй пройти бота-учителя. Он научит тебя Linux в виде игры: Курсы Linux и DevOPS Бесплатный урок