Удалите файлы в каталоге, которые соответствуют regexp, с помощью терминала Mac

Едва ли, как насчет чего Вы попросили, но использовать, "разархивировали весь" сценарий вместо.

unzip *.zip

Тем путем вывод из каждого файла входит в свой собственный каталог.

#!/bin/bash
for f in *.zip ; do unzip -n "$f" -d "${f/%zip/out}"; done
3
17.05.2011, 23:33
2 ответа

Используйте find команда.

Найдите все файлы (рекурсивно) соответствующие regex: find . -type f -regex '/ex/'
Найдите все файлы (рекурсивно) соответствующие regex, и удалите их: find . -type f -regex '/ex/' -exec rm {} \;

Скобки хранят найденный путь, и обратная косая черта выходит из точки с запятой, потому что это передается для нахождения; не выходя из него, он был бы использован оболочкой. Если это пробежалось через Вашу голову, прочитайте первые две главы "Изучения Bash Shell".

Проверьте страницы справочника на find для большего количества опций. Существует намного больше способов искать.

11
27.01.2020, 21:08
  • 1
    хороший ответ, я просто думаю, что эту команду будет легче считать rm $(find . -regex '/ex/') –  phunehehe 22.08.2010, 19:27
  • 2
    rm '{}' + + больше xargs как поведение или что-то... действительно все, что я помню, то, что это более эффективно, чем выполнение \;. –  xenoterracide 22.08.2010, 19:54
  • 3
    @phunehehe я думаю расширение оболочки, которое Вы делаете, является странным..., и я подверг бы сомнению, это - эффективность... Я также задался бы вопросом, имеет ли это предел аргумента... (который является одной из вещей xargs, был записан для работы вокруг), –  xenoterracide 22.08.2010, 19:57
  • 4
    @phunehehe: основная проблема с rm $(...) это, это не будет работать, если какие-либо из имен файлов будут содержать пробельные символы или globbing символы \\[*?, потому что оболочка разворачивает их после замены $(...). –  Gilles 'SO- stop being evil' 22.08.2010, 23:50
  • 5
    Они добавили - удаляют действие к GNU, находят в октябре 2004, который оборачивает общее "-исполнительная комната {} \"; колдовство. Существует раздел в документах (gnu.org/software/findutils/manual/html_mono / …), куда они идут через причины, это - лучшая идея использовать это, чем старый портативный путь, если можно выйти сухим из воды. Это сразу отвечает на комментарий выше, имея отношение к пробелу, среди многих других проблем. Хорошее чтение. –  Warren Young 23.08.2010, 06:53

Очень похожий на ответ jorelli. Это - то, что я использую:

find . -regex '/ex/' -print0 | xargs -0 rm

-print0 и -0 причина аргументов находит для вывода символа 0 разделенных списков и xargs для выполнения rm команда в каждом элементе списка, таким образом, пути с пробелами не являются проблемой.

2
27.01.2020, 21:08

Теги

Похожие вопросы