Linux, найти все файлы, соответствующие шаблону и удалить

Ищите все файлы (рекурсивно), которые имеют подчёркивание в имени своего файла, а затем удаляют их через командную строку.

  • Список подкаталогов на одном уровне вниз, которые не содержат определенного файла
  • Как удалить все, кроме 10 самых новых файлов в Linux?
  • Как я могу использовать nohup, если сценарий оболочки занимает больше времени для запуска?
  • Как установить g ++ 4.9.2 в Cent OS 6.5?
  • Как создать случайный файл .txt (текст, читаемый человеком, такой как ascii) в linux
  • Как определить, какой процесс открыт в Linux?
  • Ls с каталогом путь показывает файлы, но ls с шаблоном файла нет?
  • DD от / dev / zero до / dev / null ... что на самом деле происходит
  • 4 Solutions collect form web for “Linux, найти все файлы, соответствующие шаблону и удалить”

    Это самый безопасный и быстрый вариант:

    find /path -type f -name '*_*' -delete 

    Он не требует соединения и не разбивается, если файлы содержат пробелы или символы глобусов или что-то еще, что другие конструкторы задушили бы. Самое простое правило запомнить здесь – никогда не разбирать вывод вывода . И никогда не grep по именам файлов, если вы хотите что-то с ними сделать позже. Вы можете делать практически все, что можно find непосредственно.

    См. Также: GNU find Manual – Удаление файлов

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

     find . -name '*_*' -exec rm -rf {} \; 

    Если вам нужны только обычные файлы:

     find . -type f -name '*_*' -exec rm -f {} \; 

    Хорошо, давайте сделаем это постепенно.

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

     find ${BASE_DIR}/ -name '*_*' -exec rm {} \; 

    Но, конечно, это ужасно неэффективно. Он запускает весь процесс rm для каждого отдельного файла. Таким образом, хотя мы могли бы взять короткий объезд через \+ , это не то место, где мы собираемся закончить, так что давайте возьмем более короткий путь и приведем xargs чтобы дополнить имена файлов в группы:

     find ${BASE_DIR}/ -name '*_*' -print | xargs rm 

    Но у этого есть две дыры в безопасности. Во-первых, если любое найденное имя файла начинается с знака минус, rm будет рассматривать его как параметр командной строки, а не имя файла, и генерировать ошибку. (У версии -exec rm {} также есть эта проблема.) Во-вторых, имена файлов, содержащие пробелы, не будут корректно обрабатываться xargs . Итак, дальнейшая итерация – сделать это немного более пуленепробиваемым:

     find ${BASE_DIR}/ -name '*_*' -print0 | xargs -0 rm -- 

    И, конечно, есть интерактивные функции rm которые вы, вероятно, не хотите:

     find ${BASE_DIR}/ -name '*_*' -print0 | xargs -0 rm -f -- 

    Параметры -print0 и -0 не являются стандартными, но find GNU и xargs , а также find FreeBSD и xargs понимают их. Однако даже это является более эффективным. Нам не нужно создавать какие-либо дополнительные процессы. find GNU и FreeBSD s может одновременно вызвать системный вызов unlink(2) :

     find ${BASE_DIR}/ -name '*_*' -delete 

    Помните, что в качестве последней превентивной меры, чтобы остановить вас, делая больше, чем вы предполагали в определенных обстоятельствах, файловая система может содержать не только обычные файлы:

     find ${BASE_DIR}/ -name '*_*' -type f -delete 

    find . -type f -regex ".*_.*" | xargs rm -f

    объяснение
    -type f находит только файлы
    -regex ".*_.*" Выбирает только файлы с подчеркиванием в них
    xargs rm -f затем принудительно удаляет выбранный файл (никогда не запрашивает перед удалением)

    Interesting Posts

    Есть ли способ узнать, какое приложение использует большую часть полосы пропускания в Linux?

    Как перенести файл на мой сервер с помощью PuTTY?

    Автоматический повторный набор для VPN-соединений PPTP в Windows 8

    Поиск в панели управления Windows потеряет фокус после ввода одного символа

    Разница между Hyper-V и Microsoft Virtual Server

    Как переносить несколько строк в один столбец

    Как я могу VLOOKUP в нескольких документах Excel?

    Есть ли способ выяснить, какой файл был изменен chkdsk для замены плохого кластера?

    Быстрое окно с окном с гном-терминалом

    Как изменить язык для не-Unicode-программ в Windows 8

    Вертикальная линия для правого поля в Notepad ++

    Как я могу конденсировать или суммировать список в Excel?

    Требуется решение для резервного копирования: жесткий диск на NAS через Интернет?

    Не удается смонтировать разделы NTFS из-за Windows 10?

    Доступ к Интернету не работает в Virtual PC

    Давайте будем гением компьютера.