Рейтинг:2

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

флаг dk

Следующая команда из https://www.tecmint.com/xargs-command-examples/ пример №9. Это удаление файлов, не соответствующих *gz, из текущего каталога.

$ найти . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}

Какова цель -print0 аргумент найти команда и -0 и -Я {} аргументы xargs команда? Зачем они нужны? Спасибо!

Рейтинг:4
флаг hr

-print0 рассказывает найти для вывода результатов, разделенных нулевыми байтами вместо обычных символов новой строки. Это необходимо, если имена файлов содержат (или могут в будущем) сами символы новой строки.

Затем вам нужно сказать xargs ожидать, что данные с нулевым разделителем поступают по трубе - вот что -0 это для. Так что здесь необходимо при использовании -print0 на ЛХС.

Тем временем {} является строкой замены - когда вы используете -Я {}, каждый {} в следующей команде будет заменен элементом ввода. Это действительно необходимо только тогда, когда вам нужен контроль над тем, где элемент появляется в следующей командной строке (и имеет побочный эффект запуска одного вызова для каждого элемента, что эквивалентно добавлению -Л 1). ИМХО, здесь это не нужно, и делает решение неэффективным, поскольку оно работает г.м. один раз для каждого найденного файла, а не пакетами.

Обратите внимание, что найти имеет -exec вариант и -удалять вариант, который позволяет полностью избежать проблемы записи/чтения данных с разделителями:

найти . -type f -not -name '*gz' -exec rm -v {} +

или же

найти . -type f -not -name '*gz' -print -delete

( -Распечатать здесь, чтобы дать аналогичную функциональность, как -v возможность г.м.).

Raffa avatar
флаг jp
+1 ... `xargs -0` также является `xargs --null`
флаг hr
@Raffa true, и `-not` в find также (более портативно) `!` - хотя я всегда не решаюсь перегружать ответы TMI ...

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.