Удаление файлов линукс
Linux, pleaseУ вас может возникнуть ситуация, когда необходимо удалить несколько файлов, имеющих определенное расширение.
Это руководство поможет вам сделать именно это.
Вы используете команду rm для удаления файлов и папок следующим образом:
rm [option] filename
Может показаться, что здесь нужно знать точные имена файлов, но это не так.
Позвольте мне показать вам несколько методов удаления нескольких файлов на основе их расширения.
Способ 1: Как удалить файлы по расширению с помощью команды rm
В моем примере у меня есть куча gif-файлов, которые заканчиваются расширением .gif.
Чтобы удалить их, я могу использовать команду rm следующим образом:
rm *.gif
Такое удаление файлов вслепую может быть рискованным.
Всегда полезно сначала посмотреть, какие файлы будут удалены с помощью команды ls:
ls *.gif
Вот как я удалю файлы с расширением .gif:
$ ls 1.gif 2.gif 3.gif 4.gif a.jpg b.png c.webp $ ls *.gif 1.gif 2.gif 3.gif 4.gif $ rm -v *.gif removed '1.gif' removed '2.gif' removed '3.gif' removed '4.gif' $ ls a.jpg b.png c.webp
Это можно сделать для любых расширений файлов, не только .gif.
Можно даже объединить несколько расширений.
$ ls f1.txt f2.txt f3.txt f4.txt not-txt-file.pdf random.txt $ rm -v *.txt *.pdf removed 'f1.txt' removed 'f2.txt' removed 'f3.txt' removed 'f4.txt' removed 'not-txt-file.pdf' $ ls random.txt
Вы можете использовать интерактивную опцию -i с командой rm, которая запрашивает подтверждение перед удалением каждого файла. Однако это может быть неудобно, если вам нужно удалить множество файлов.
Интересно, как это работает? Подстановочные знаки!
В двух словах, подстановочный знак – это специальный символ, который используется для поиска определенного шаблона.
Ниже приведены несколько часто используемых символов подстановки:
СимволИспользование*Совпадение одного или нескольких результатов?Сопоставить одно совпадение[] (Квадратные скобки)Указать диапазон для сопоставления^Исключение
Вы использовали подстановочный знак *, что означает, что он может соответствовать одному или нескольким совпадению любого символа.
Когда вы вводите *.gif, это означает любую комбинацию букв, которая ведет к .gif.
Другими словами, это даст вам все файлы с расширением .gif.
Каждый подстановочный знак может быть использован в дополнение к еще одному подстановочному знаку.
Но не будем сейчас углубляться в эти детали.
Точка между * и расширением очень важна!
Многие люди совершают ошибку, путая *.gif с *gif.
Это неправильно.
Точка (.) между * и именем расширения имеет решающее значение.
Возьмем сценарий со следующими файлами и посмотрим, что произойдет, когда я использую регекс *gif вместо *.gif:
$ ls 1.gif 2.gif 3.gif 4.gif definately-not-a-gif jpg-not-gif not-a-gif $ rm -v *gif removed '1.gif' removed '2.gif' removed '3.gif' removed '4.gif' removed 'definately-not-a-gif' removed 'jpg-not-gif' removed 'not-a-gif'
Команда также удалила файлы со строкой gif, хотя это не было расширением файла, а просто gif в конце имени файла без предшествующей точки.
Когда вы удаляете файлы с помощью подстановочных знаков или regex, пожалуйста, убедитесь, что вы максимально точны.
Метод 2: Рекурсивное удаление файлов с определенным расширением с помощью команды find
Команда rm удаляет только файлы в текущем каталоге.
Она не удаляет файлы из подкаталогов, даже с опцией рекурсии.
Чтобы рекурсивно удалить файлы с определенным расширением, можно комбинировать команды find и rm:
Вот пример, где у меня есть файлы .gif и в подкаталогах.
$ ls * file_0.gif file_z.txt not-a-gif not-a-txt dir1: file_1.gif file_a.txt not-a-gif not-a-txt dir2: file_2.gif file_b.txt not-a-gif not-a-txt dir3: file_3.gif file_c.txt not-a-gif not-a-txt dir4: file_4.gif file_d.txt not-a-gif not-a-txt
Чтобы удалить файлы, вы можете использовать команду find следующим образом:
find . -type f -name "*.gif" -exec rm -v {} \;
Вот вывод, когда я выполнил команду:
$ find . -type f -name "*.gif" -exec rm -v {} \; removed './dir1/file_1.gif' removed './dir3/file_3.gif' removed './dir2/file_2.gif' removed './file_0.gif' removed './dir4/file_4.gif
Давайте разберемся.
- Точка после “find” означает поиск в текущем каталоге.
- Флаг “-name” указывает имя файла, в котором мы можем использовать regex
- Флаг “-exec” используется для выполнения команды bash на результат команды find
- Фигурные скобки “{}” служат для размещения результата поиска файла(ов), поэтому “rm -v {}” удалит файлы, найденные командой find.
- Наконец, точка с запятой завершает команду, выполняемую оболочкой (команда после exec), и обратная косая черта ‘\’ используется для того, чтобы точка с запятой была поставлена правильно. Вам не следует беспокоиться об этом.
бонусный совет: Используем команду find для работы с файлами с несколькими расширениями
Приведенная выше команда не позволяет найти файлы с несколькими расширениями, например, “rm *.gif *.txt”.
Для этого можно использовать аргумент -o, который означает “логический оператор OR”.
Но мы также должны использовать обратную косую черту ‘\’, чтобы раскрыть круглые скобки
$ ls * file_0.gif file_z.txt not-a-gif not-a-txt dir1: file_1.gif file_a.txt not-a-gif not-a-txt dir2: file_2.gif file_b.txt not-a-gif not-a-txt dir3: file_3.gif file_c.txt not-a-gif not-a-txt dir4: file_4.gif file_d.txt not-a-gif not-a-txt $ find . \( -name "*.gif" -o -name "*.txt" \) -exec rm -v {} \; removed './dir1/file_1.gif' removed './dir1/file_a.txt' removed './dir3/file_3.gif' removed './dir3/file_c.txt' removed './dir2/file_2.gif' removed './dir2/file_b.txt' removed './file_0.gif' removed './file_z.txt' removed './dir4/file_d.txt' removed './dir4/file_4.gif'
Здесь видно, что все файлы с расширением ‘txt’ и файлы с расширением ‘gif’ удаляются рекурсивно.
Я знаю, что вам покажется, что использовать команду find отдельно для каждого типа расширения файла было бы проще, и вы не ошибетесь.
Заключение
В этой статье мы рассмотрели удаление файлов с определенным расширением.
Мы также рассмотрели рекурсивный поиск и удаление этих файлов.
- 📺 UnderMind - Наш YouTube канал
- ✅ [YT]UnderMind - Наш основной TG канал
- 🏴☠️ UnderPrivate - Приватный канал
- 🛒 HackAli - cамые интересные хакерские товары с Aliexpress!
- 👨💻 Termux, please - 100% termux
- 📱 Android, please - от APK до мануалов
- 🐧 Linux, please - всё о Linux
- 💭 https://t.me/UnderChats - Чат
- ⚡️ Мы в Yandex.Zen - Лучший контент со всех наших каналов