Как удалить файлы по шаблону

Обновлено: 25.11.2022

Нужно найти все файлы (рекурсивно), которые имеют подчеркивание в имени файла, а затем удалить их через командную строку.

4 ответа 4

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

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

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

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

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

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

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

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

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

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

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

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

Первый способ основан на возможностях командной строки, а именно команды FOR с ключом /r. Необходимо перейти в каталог, во вложенных каталогах которого необходимо удалить файлы, и написать команду:

Вместо *.jpg можно подставить любую другую маску.
Если вместо (.) указать () , то можно обойтись и без перехода.
Запись "%~a\*.jpg" предназначена для имен папок и файлов, содержащих пробелы. Если все имена короткие и без пробелов, можно написать просто %a\*.jpg . Преимущество этого способа в возможности использования в командном файле, но для имен файлов с Unicode символами это не сработает.

Второй вариант основан на встроенной функции поиска и не требует использования командной строки.

В проводнике необходимо

  • открыть папку, во вложенных папках которой требуется удалить файлы,
  • ввести в поле поиска часть имени файла,
  • в списке найденных файлов выделить их (Ctrl-A) и удалить (Del).

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

Но если использовать Far Manager, то поиск можно выполнить, как и в проводнике, надо лишь в окне поиска (Alt-F7) после получения результата нажать кнопку Панель (Panel в английской версии), и Far откроет временную панель с найденными файлами. Дальше можно выделить один или несколько файлов (Insert), или же все файлы (Ctrl-Num+), а затем удалить (F8), скопировать (F5) или переместить (F6).

You May Also Like

Цвет текста в консоли Win32

Дублирование вывода консоли в файл

Дублирование вывода консоли в файл

Добавить комментарий Отменить ответ

Популярные записи

Определить IP адрес по MAC адресу через arp кеш в командной строке или bat файле

Расчет платежей ЖКУ в Excel за воду, электричество, газ по показаниям счетчиков

Расчет ДЧП в Excelс пересчетом суммы платежа и подсчетом процентов

Свежие комментарии

привет! А как скорость ему сетнуть!.bat files

Привет, Я разработал небольшой инструмент, который позволяет исправлять установленные голоса, чтобы сделать их доступными для механизма преобразования текста в речь…

спасибо за обратную связь

Разобрался. Птичий язык, это если не установлена русская локаль. У меня оборудование буржуйское, поэтому стоит локаль USA. Поменял на Русскую…

Конфигурация компьютера
Процессор: Intel Core 2 Quad Q9300, 2500 MHz (7,5 x 333)
Материнская плата: Asus P5Q PRO
Память: Transcend 2048x2 4096 Мб (DDR2-1066 DDR2 SDRAM)
HDD: Seagate ST3250410AS (250 Гб, 7200 RPM, SATA-II) + STM31000528AS (1 Тб, 7200 RPM, SATA-II)
Видеокарта: Asus EAH3650 (RV635)
Звук: Realtek ALC1200 (встроенный)
Блок питания: ExeGate 350W
CD/DVD: Optiarc DVD RW AD-7170S
Монитор: Samsung SyncMaster 971P 19''
ОС: Windows 7 Ultimate SP1 (x64)
Индекс производительности Windows: 5,9

Переменная цикла в .bat файле должна предваряться двойным (%%i) знаком процента, а не одинарным (%i) как в ком. строке.

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Здравствуйте!
Задача: нужно удалить все папки *M A S K A* только из корня каталога F L D R , но не из вложенных в него папок (и всё упомянутое может иметь пробелы в именах).
Например, такой скрипт

удаляет папки *M A S K A* в т.ч. и из вложенных папок каталога F L D R .
Нельзя ли в скрипте что-то изменить (или предложить новый)?

Конфигурация компьютера
Процессор: AMD FX 8300
Материнская плата: Gigabyte GA-970A-UD3
Память: 2х2 Гб Kingston DDR3-1333, 2х4 Гб Kingston DDR3-1333
HDD: 250Гб(SSD Samsung 860EVO) +500Гб(ST3500418AS)+2000Гб(ST2000DM001)
Видеокарта: Radeon X1650
Блок питания: Be Quiet SYSTEM POWER 9 500W [BN246]
CD/DVD: Optiarc DVD RW AD-5280S
Монитор: Dell UltraSharp U2414Hb
ОС: Windows 10 x64

sov44, спасибо!
(Я так понимаю, Вы о втором по счету ключе /s).
Если бы всё было так просто, не спрашивал бы. Что касается обоих ключей /s :
такой скрипт

Последний раз редактировалось qaaqasqad, 21-03-2017 в 21:35 .

Конфигурация компьютера
Процессор: AMD FX 8300
Материнская плата: Gigabyte GA-970A-UD3
Память: 2х2 Гб Kingston DDR3-1333, 2х4 Гб Kingston DDR3-1333
HDD: 250Гб(SSD Samsung 860EVO) +500Гб(ST3500418AS)+2000Гб(ST2000DM001)
Видеокарта: Radeon X1650
Блок питания: Be Quiet SYSTEM POWER 9 500W [BN246]
CD/DVD: Optiarc DVD RW AD-5280S
Монитор: Dell UltraSharp U2414Hb
ОС: Windows 10 x64

Батник должен лежать рядом с папками. Если в в именах папок имеется кириллица, батник сохранять в 866 кодировке.

Последний раз редактировалось qaaqasqad, 20-03-2017 в 18:48 .

Ну, почему сразу «ничего». Вот, скажем, если рядом с «F L D R» окажутся папки, совпадающие с найденными внутри «F L D R» именами папок по шаблону «*M A S K A*» — он их, несомненно, удалит .

alpap, мне нравится эта возможность xcopy, но обычно я стремлюсь не делать новых файлов из опасения попасть на отсвутствие прав на запись. Да и убрать за собой неплохо бы☺. А если этот служебный файл расположить где-то в %tmp%, то потом им в xcopy не воспользуешься.

а также все файлы, в имени которых (в том числе и имени папки в пути) содержится aa bb. Поэтому ИМХО, этим надо пользоваться осторожнее.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Конфигурация компьютера
Процессор: Intel(R) Core(TM) i3 CPU M 370 2.40GHz, ядер: 2, логических процессоров: 4
Память: 8,00 ГБ
ОС: Windows 10 Pro x64

дык это понятно, и это мы еще о файлах без расширения не говорили, кодировки не упоминали и длину имени, кто ж спорит по части осторожности?
тут в данном случае все четко определено и если так же четко подавать (и учесть что не будет таких: ""Ru.pdfEn.pdf""имен файлов, хотя почему и нет), то работать будет, а соломку с собой носить надо

А если этот служебный файл расположить где-то в %tmp%, то потом им в xcopy не воспользуешься. »
Конфигурация компьютера
Процессор: Intel(R) Core(TM) i3 CPU M 370 2.40GHz, ядер: 2, логических процессоров: 4
Память: 8,00 ГБ
ОС: Windows 10 Pro x64

тем более этот служебный файл никуда и не прячется, создается рядом и оттуда же сразу и удаляется (del /q "%%~a" $)

Iska,
Не работает
xcopy Z:\temp\*.* /L /EXCLUDE:"Z:\У попа была собака\kuku"
xcopy Z:\temp\*.* /L /EXCLUDE:Z:\У попа была собака\kuku
xcopy Z:\temp\*.* /L /EXCLUDE:"kuku"

Работает
xcopy Z:\temp\*.* /L /EXCLUDE:Z:\Траляля\kuku

Еще другая неприятность с ключом L: xcopy Z:\temp\*.* /L работать не будет, если находиться в папке где файлы (Z:\temp\), выдаст "Невозможно скопировать файл в себя".
ИМХО аккуратнее написать, например
xcopy Z:\temp\*.* "%Tmp%\" /L
то есть в качестве выходной указать другую существующую папку, хотя туда и ничего не попадёт. Кстати, еще странность: если там будет файл с таким же именем, как и в исходной папке, выдаст запрос на перезапись.

Извините, впал в глубокий оффтоп, но конструкция

при наличии кириллических символов в названии для xcopy не работает, а Dir - пожалуйста! (хотел записать рез работы xcopy в файл для прочтения в notepad)
alpap, а если батник запускается с расшаренного ресурса с запретом на запись?
Вообще, xcopy моя любимая команда, но иногда доводит до истерики

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Linux

Изучение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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