Вот два метода удаления файлов на основе их расширения в командной строке Linux. Также ознакомьтесь с несколькими советами, чтобы быть осторожнее в процессе удаления.
Может возникнуть ситуация, когда вы захотите удалить несколько файлов с определенным расширением. Эта статья поможет вам сделать именно это.
Вы используете команду rm для удаления файлов и папок следующим образом:
rm [option] filename
Может показаться, что здесь вам нужно знать точные имена файлов, но это не так.
Вот два метода удаления нескольких файлов в зависимости от их расширения.
Метод 1: Удалите файлы с определенным расширением с помощью команды rm
В примере есть куча gif-файлов, которые заканчиваются расширениями .gif.
Чтобы удалить их, можно использовать команду rm следующим образом:
rm *.gif
Удаление файлов подобным образом вслепую может быть рискованным. Всегда полезно сначала посмотреть, какие файлы будут удалены с помощью команды ls:
ls *.gif
Вот как удалить файлы с расширением .gif:
Это можно сделать для любого расширения файла, а не только .gif. Вы даже можете комбинировать несколько расширений.
💡
Вы можете использовать интерактивную опцию -i с командой rm, которая запрашивает подтверждение перед удалением каждого файла. Однако это может быть неудобно, если вам нужно удалить множество файлов.
Интересно, как это работает? Подстановочные знаки!
В двух словах, подстановочный знак - это специальный символ, который вы используете для соответствия определенному шаблону. Ниже приведены несколько часто используемых подстановочных знаков.:
Здесь вы использовали подстановочный знак *, который означает, что он может соответствовать одному или нескольким вхождениям любого символа.
Когда вы говорите *.gif, это означает любую комбинацию букв, которая ведет до .gif. Другими словами, это дает вам все файлы с расширением .gif.
Каждый подстановочный знак может использоваться в дополнение к еще одному подстановочному знаку. Но давайте не будем сейчас вдаваться в эти подробности.
Эта точка между * и расширением важна!
Многие люди совершают ошибку, путая *.gif с *gif. Это неправильно. Точка (.) между * и именем расширения имеет решающее значение.
Возьмём сценарий со следующими файлами и посмотрим, что происходит, если использовать выражение *gif вместо *.gif:
Также были удалены файлы со строкой gif, даже если это не было расширением файла, в конце имени файла просто был gif без предшествующей точки.
📌При удалении файлов с использованием подстановочных знаков или регулярных выражений, пожалуйста, убедитесь, что вы действуете максимально точно.
Метод 2: Рекурсивное удаление файлов с определенным расширением с помощью команды find
Команда rm удаляет только файлы в текущем каталоге. Она не удаляет файлы из подкаталогов, даже с рекурсивной опцией.
Для рекурсивного удаления файлов с определенным расширением вы можете объединить команду find и команду rm:
Вот пример, где также есть файлы .gif в подкаталогах.
Чтобы удалить файлы, вы можете использовать команды find и exec следующим образом:
find . -type f -name "*.gif" -exec rm -v {} \;
Вот результат, который получился, после запуска команды:
Давайте разберем это подробнее.
- Точка после "find" означает поиск в текущем каталоге
- Флаг "-name" указывает имя файла, в котором мы можем использовать регулярное выражение
- Флаг "-exec" используется для выполнения команды bash по результату команды find
- Фигурные скобки "{}" служат заполнителем для результата сопоставления файлов, поэтому "rm -v {}" удалит файлы, найденные командой find.
- Наконец, точкой с запятой заканчивается команда, выполняемая вашей командной оболочкой (команда после exec), и используется обратная косая черта '\', чтобы точка с запятой была экранирована должным образом.
Используйте команду find для работы с файлами с несколькими расширениями
Команда, показанная выше, не распространяется на поиск файлов с несколькими расширениями, что-то вроде "rm * .gif * .txt"
Для достижения этого вы можете использовать -o аргумент, который означает "логический оператор OR". Но мы также должны использовать обратную косую черту "\", чтобы избежать круглых скобок
Здесь вы можете видеть, что все файлы с расширением 'txt' и файлы с расширением 'gif' удаляются рекурсивно.
Вам покажется, что использовать команду find отдельно для каждого типа расширения файла было бы проще, и вы не ошибаетесь.
Заключение
В этой статье рассказывалось об удалении файлов с определенным расширением. Мы также рассмотрели рекурсивный поиск и удаление этих файлов.
📌"С большой мощью приходит большая ответственность", помните об этом при использовании подстановочных знаков и регулярных выражений. Одна ошибка - и важные файлы могут быть случайно удалены .
Ставьте лайк .Смотрите другие наши статьи,подписывайтесь на канал чтобы не пропустить интересное.