Linux удаляет файлы по маске

Обновлено: 01.07.2024

Если я установлю текущий/рабочий каталог (переходя к нему с помощью cd ) в какой-то конкретный каталог, а затем наберу:

Что будет делать эта команда? Верно ли, что приведенная выше команда удалит файлы с расширением .xvg только в рабочем каталоге?

Я боялся попробовать это, прежде чем спрашивать, потому что я хочу быть абсолютно уверенным, что приведенная выше команда удалит только файлы .xvg, НАХОДЯЩИЕСЯ В РАБОЧЕМ КАТАЛОГЕ.

4 ответа 4

Да, rm *.xvg только удалит файлы с указанным расширением в вашем текущем каталоге.

Хороший способ убедиться, что вы действительно находитесь в каталоге, из которого хотите удалить файлы, — это использовать команду pwd, которая отобразит ваш текущий каталог, а затем выполнить ls, чтобы убедиться, что вы нашли файлы. вы ожидаете.

Если вы немного опасаетесь запускать команду rm, вы можете сделать две вещи:

введите ls *.xvg, чтобы увидеть список файлов, на которые повлияет эта команда.

Если у вас много файлов, вы всегда можете использовать ключ командной строки -i для rm (также существует для cp и mv ). Использование rm -i *.xvg предложит вам для каждого отдельного файла, можно ли его удалить, поэтому вы можете быть уверены, что ничего, чего вы не ожидали, не было удалено. (Это будет утомительно, если у вас много файлов :)

Вам не нужно переходить в каталог, просто используйте

В случае опечатки или подобной ошибки в пути, где /som/dir не существует:

случайно удалит все файлы .xvg в текущем каталоге. Первая команда не будет, и вам не нужно снова выполнять cd.

Альтернативным способом может быть использование find:

find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete у меня сработало! используйте -maxdepth "n", чтобы удалить соответствующие файлы в подкаталоге, если указан путь

Да, rm *.xvg удалит только файлы, заканчивающиеся на .xvg, в вашем текущем каталоге. Вот почему.

Когда вы вводите такую ​​команду, работа распределяется между используемой оболочкой (допустим, bash) и двоичным кодом команды.

Вы можете найти двоичный файл, набрав rm . Эта небольшая программа позаботится об удалении файлов. Такие программы можно запускать из командной строки, и они могут читать список аргументов prog arg1 arg2 arg3 при запуске. В случае rm они интерпретируются как список полных имен файлов, которые необходимо удалить. Таким образом, если вы находитесь в каталоге, содержащем файл foo.bar , набрав 'foo.*', вы получите rm: foo.*: Нет такого файла или каталога. Обратите внимание на одинарные кавычки вокруг шаблона файла, они говорят оболочке передать аргумент оболочке как есть.

Однако, если вы введете rm *.bar в том же каталоге, файл будет удален. Здесь происходит следующее: ваша оболочка, программа, которую вы используете для ввода команд, выполняет некоторые преобразования перед передачей аргументов команде. Один из них называется «расширение имени файла», иначе известное как «подстановка». Вы можете увидеть список расширений имен файлов bash здесь. Одним из наиболее распространенных расширений является * , который расширяется до имен файлов в текущем каталоге.

Простым способом посмотреть на работу глобусов является использование команды echo , которая выводит все аргументы, переданные ей через оболочку. Таким образом, ввод echo * в том же каталоге выведет foo.bar . Итак, когда вы вводите rm *.bar , на самом деле происходит то, что оболочка расширяет список аргументов до foo.bar , а затем передает его команде rm.

Существует несколько способов управления подстановкой. Например, в последних версиях bash вы можете включить параметр под названием globstar, который будет выполнять рекурсивное расширение. Набрав echo **/*.bar, вы увидите список всех файлов, оканчивающихся на .bar, во всех подпапках. Таким образом, ввод rm **/*.bar в bash с поддержкой globstar действительно рекурсивно удалит все соответствующие файлы во вложенных папках.

Каждый файл имеет определенное расширение. Если мы хотим удалить файлы с одинаковыми или разными расширениями из нашей системы Linux, мы должны следовать многим различным типам команд. В этой статье мы увидим, как удалить все файлы с расширением командной строки Linux.

Удалить все файлы с расширением командной строки Linux

В этом разделе объясняются различные способы и методы удаления всех файлов с расширениями с помощью командной строки в Linux.

Использование команды rm

Команда 'rm' — это базовая утилита командной строки в Linux для удаления сокетов, каналов, узлов устройств, символических ссылок, каталогов, системных файлов и т. д. Чтобы удалить файл с определенным расширением, используйте команду 'rm '. Эту команду очень легко использовать, и ее синтаксис примерно такой.

В соответствующей команде «имя_файла1», «имя_файла2» и т. д. укажите имена и полные пути к ним. Когда файлы находятся в одном каталоге, нам не нужно писать полный путь, но мы должны указать полный путь, если это не так.

Выражения с подстановочными знаками можно использовать для указания добавочных файлов с одинаковыми именами или файлов с определенными расширениями. Итак, давайте возьмем пример, в котором мы удалим файлы DATA.txt, DATA1.txt и DATA2.txt. Эти файлы доступны в каталоге Documents, поэтому сначала мы откроем их в терминале с помощью следующей команды:

После этого выполните приведенную ниже команду

Теперь давайте проверим, что система успешно удалила файлы, поэтому выполните следующую команду:

Использование файлов удаления подстроки

С помощью следующей команды мы можем удалить те файлы, которые содержат подстроку «тест».

Здесь ‘*’ обозначает любую строку. Вот почему здесь «*test*» считает все файлы, имена которых содержат подстроку «test».

Мы можем легко удалить файлы определенных расширений из любой папки. В этом примере мы удалим файлы с расширением gif. Мы можем удалить все файлы GIF из папки, используя следующую команду.

Приведенный выше синтаксис работает только для файлов. Вместе с файлами мы также можем удалять папки, используя аргумент ‘-r’:

Главное отметить, что он рекурсивно удаляет папку в целом, т. е. все файлы, подпапки и т. д. этой папки во всей структуре папок. Отсюда следует, что рекурсивно удалить файлы с определенными расширениями или файлы с шаблонами имен файлов невозможно.

Найти команду

Найти — самая эффективная и популярная команда для поиска файлов. Команда find используется для удаления расширений файлов в Linux. Команда find рекурсивно ищет файлы по размеру, расширению, имени и параметрам файла. Используя команду find, мы можем направить ее вывод в «rm».

Резервное копирование и проверка файлов

Различные команды также используются для проверки того, какие файлы мы удаляем, и правильности их расположения. Однако этот шаг не требуется, если он правильный, чтобы быть уверенным.

Подтвердить местоположение

Мы должны убедиться, что расположение нашего файла правильное. Для этого мы используем следующую команду.

Резервные копии файлов

Для резервного копирования мы используем команду tar. Если мы не уверены на 100%, есть ли у нас нужные файлы для удаления или нет, мы должны сделать резервную копию.

Мы можем добавить параметр -v, чтобы увидеть список файлов, резервные копии которых создает команда tar.

Удалить файлы с помощью поиска — удалить

Если мы колеблемся при использовании «rm», мы можем использовать «find» помимо этого. Его следует использовать с осторожностью. Это что-то вроде этого.

Прежде всего мы проверяем, какой файл нужно удалить. Для этого мы используем следующую команду.

Мы должны позаботиться о том, чтобы -delete был последним аргументом в нашей команде. Если мы по ошибке поместим его перед аргументом -name *.bak, он удалит все.

Удалить файлы с помощью find и xargs

Опция "-удалить" не поддерживается. Мы можем передать его в «rm» следующим образом с выводом, который появляется перед нами при поиске.

Здесь мы передаем аргумент «rm» с помощью команды «xargs». С помощью этого метода мы можем рекурсивно удалить всю структуру папок.

Удаляет файлы с помощью find-exec

Мы используем rm с различными командами (например, корзину) или дополнительными параметрами для удаления файлов.

Использование find с -exec дает нам преимущество использования любого параметра и команды для удаления файлов. В то же время это также позволяет нам выполнять другие массовые операции с набором файлов.

Заключение

В этой статье мы узнали, как удалить любой файл из папки или папки с любым расширением с помощью различных команд. Мы надеемся, что из этой статьи, объясненной нами, вы получите полную информацию в одном месте, и вы, должно быть, очень хорошо ее поняли.

Об авторе

Пратик Джангид

Увлеченный пользователь Linux по личным и профессиональным причинам, всегда изучает новинки мира Linux и делится ими со своими читателями.

Как безопасно удалить все файлы с определенным расширением (например, .bak ) из текущего каталога и всех подпапок с помощью одной командной строки? Просто я боюсь использовать rm, так как однажды я использовал его неправильно, и теперь мне нужен совет.


8 ответов 8

В этом случае вам даже не нужно использовать rm, если вы боитесь. Используйте поиск :

Но используйте его с осторожностью. Выполнить сначала:

чтобы увидеть, какие именно файлы вы удалите.

Кроме того, убедитесь, что -delete является последним аргументом в вашей команде. Если вы поместите его перед аргументом -name *.bak, он удалит все.

Дополнительную информацию см. в разделах man find и man rm, а также см. соответствующий вопрос в SE:

При настройках по умолчанию rm *.bak удалит только все файлы, оканчивающиеся на .bak, в текущем каталоге. Чтобы также делать что-то в подкаталогах, вам нужно было возиться с глобусами, используйте параметр -r или используйте пример поиска.

@Hennes Будьте осторожны с rm -r *.bak ! Он также удаляет каталоги, оканчивающиеся на .bak, со всем их содержимым.

Убедитесь, что -delete является последним аргументом вашей команды. Если вы поместите его перед аргументом -name *.bak, все будет удалено.



Добро пожаловать в аскубунту! Хотя это совершенно правильный ответ, я не думаю, что есть какое-то преимущество в использовании этого вместо флага -delete find . Дополнительную информацию об удалении файлов с помощью find можно найти в разделе руководств GNU.

Это не просто альтернатива, а пример того, как другие команды могут быть объединены с вертикальной чертой '|'. +1

Сначала введите команду shopt -s globstar . Вы можете запустить это в командной строке, и это будет работать только в этом окне оболочки. Вы можете поместить его в свой .bashrc, и тогда все вновь запущенные оболочки подхватят его. Результатом этой команды является рекурсивное сопоставление **/ файлов в текущем каталоге и его подкаталогах (по умолчанию **/ означает то же самое, что и */ : только в ближайших подкаталогах). Затем:

(или gvfs-trash **/*.bak или что там у вас).


Удаление файлов для меня не то, для чего вы должны использовать rm. Вот альтернатива:

Как отмечает Флимм в комментариях:

Пакет trash-cli делает то же самое, что и gvfs-trash, но не зависит от gvfs.

Для этого не нужно создавать псевдоним, потому что в пакете trash-cli есть команда trash , которая делает то, что нам нужно.

Как поясняет Элиа Каган в обширных комментариях, вы также можете сделать это рекурсивным, используя find . В этом случае вы не можете использовать псевдоним, поэтому приведенные ниже команды предполагают, что вы установили trash-cli. Подытожу комментарии Элии:

Эта команда находит и отображает все файлы .bak и символические ссылки в любом месте текущего каталога или его подкаталогов или ниже.

Чтобы удалить их, добавьте -exec к команде корзины:

-xtype f выбирает файлы и символические ссылки на файлы, но не на папки. Чтобы также удалить папки .bak, удалите эту часть и используйте -execdir , что позволяет избежать неустранимых ошибок для файлов .bak внутри каталогов .bak:

Если у вас есть несколько лет опыта работы с экосистемой Linux и вы хотите поделиться этим опытом с сообществом, ознакомьтесь с нашими Правилами участия.

1. Обзор

Как системный администратор в системе Linux, мы можем потратить довольно много времени на уборку. Часто это включает рекурсивный поиск и удаление файлов в дереве каталогов.

В этом руководстве мы рассмотрим несколько способов удаления пакетов файлов на основе «расширений» файлов или шаблонов имен файлов. Мы также обсудим, как избежать некоторых распространенных ошибок при пакетном удалении.

2. Предупреждение

Когда мы удаляем файл через интерфейс командной строки в Linux, он исчезает навсегда. Поэтому мы должны соблюдать несколько рекомендаций, поскольку мы удаляем несколько файлов одной командой.

Во-первых, мы должны убедиться, что удаляем правильные файлы. Чтобы помочь с этим:

  • Мы можем использовать pwd для проверки текущего каталога или правильности пути к файлам
  • Мы должны убедиться, что удаляем только то, что хотим удалить, используя ls для просмотра списка и просмотра файлов.
  • Мы можем просмотреть, какие файлы будут удалены, используя команду без включенной части удаления

Во-вторых, мы должны рассмотреть возможность создания резервной копии каталога перед удалением из него. Команда Linux tar полезна для создания резервных копий каталогов.

3. Проверка и резервное копирование файлов

Для наших примеров предположим, что мы редактируем некоторые текстовые файлы с помощью текстового редактора Emacs. Emacs создает резервную копию каждого отредактированного файла с символом «~» (тильда) в конце имени файла. После редактирования некоторых текстовых файлов мы хотим удалить все файлы, оканчивающиеся на «.txt~».

Во всех наших примерах удаления мы будем использовать команду Linux find для определения всех файлов, которые нужно удалить. find — самый популярный и эффективный инструмент для поиска файлов в Linux.

3.1. Подтвердить местоположение

Давайте сначала проверим, что мы находимся в правильном месте, используя pwd:

3.2. Поиск и проверка файлов

Теперь давайте еще раз проверим, какие файлы мы хотим удалить, составив команду find, которая их найдет, и используя ее, чтобы просмотреть их, а не удалять:

Здесь мы используем параметры -type f для выбора файлов, -name '*.txt~' для соответствия имени файла и - print, чтобы вывести имя файла на терминал.

3.3. Резервные файлы

Далее создадим резервную копию каталога с помощью tar. Это необязательный шаг, но мы должны сделать резервную копию, если мы не уверены на 100%, что у нас есть правильные файлы для удаления:

Чтобы просмотреть список файлов, резервные копии которых выполняет tar, можно добавить параметр -v:

4. Удалить файлы с помощью найти -удалить

Самый простой способ удалить файлы — попросить найти удалить их для нас. Мы можем использовать параметр -name с find, чтобы указать выражение глобуса. В следующих примерах мы используем выражение glob для поиска файлов с определенным расширением. Подстановка полезна для поиска гораздо большего, чем просто расширения файлов, как видно из справочной страницы.

Чтобы удалить файлы с помощью поиска, мы просто добавляем -delete в конец команды найти.

Или, если мы не хотим печатать файлы при их удалении:

5. Удалить файлы с помощью find -exec

Допустим, нам нужно использовать rm с некоторыми дополнительными параметрами или другую команду (например, trash) для удаления файлов:

Использование find с -exec позволяет нам использовать любую команду и параметры для удаления файлов. Это также позволяет нам выполнять другие массовые операции с набором файлов.

6. Удаление файлов с помощью find и xargs

Наконец, мы можем обнаружить, что наш дистрибутив предоставляет нам версию команды find, которая не поддерживает параметр -delete. В этом случае мы можем использовать find с xargs:

Когда мы используем xargs, важно использовать разделители null, чтобы не было проблем с пробелами в именах файлов.

7. Заключение

В этой статье мы рассмотрели три способа рекурсивного удаления файлов с помощью find и нескольких других команд. Мы также рассмотрели важность проверки того, что мы собираемся удалить, и значение быстрого резервного копирования перед удалением нескольких файлов.

Если у вас есть несколько лет опыта работы с экосистемой Linux и вы хотите поделиться этим опытом с сообществом, ознакомьтесь с нашими Правилами участия.

Читайте также: