Как выйти из вывода файла для совместимости с 'xargs'?

У меня есть эта команда:

find $1 | xargs touch

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

Как я могу выйти из вывода так эта команда работы со всеми именами файлов?

6
задан 30.07.2014, 11:26

3 ответа

find $1 -print0 | xargs -0 touch

Это завершает каждое имя файла с \000 (символ 0) и дает xargs команду ожидать имена файлов, завершенные \000

   -print0
          True; print the full file name on the standard output,  followed
          by  a  null  character  (instead  of  the newline character that
          -print uses).  This allows file names that contain  newlines  or
          other  types  of white space to be correctly interpreted by pro‐
          grams that process the find output.  This option corresponds  to
          the -0 option of xargs.
7
ответ дан 07.12.2019, 15:33

Вот более простое, более быстрое и большая часть портативного способа сделать это:

find $1 -exec touch {} +

Отметьте + конечный синтаксис. В отличие от более популярного \; exec конечный синтаксис, + упаковывает аргументы тот же путь xargs делает.

По сравнению с часто предлагаемым find ... | xargs ..., это find только решение более эффективно потому что:

  • единственный процесс справляется с целой задачей
  • никакая передача по каналу данных не включена
  • никакая дополнительная обработка, связанная с эти "\0" взлом, не требуется.

Будучи совместимым POSIX, это также работает с большинством если не весь ток find реализации, в отличие от этого, find -print0 и xargs -0 которые являются оба GNUisms.

8
ответ дан 07.12.2019, 15:33

Если Ваш вход не от find, но из некоторой другой генерирующей строку программы, можно хотеть взглянуть на Параллель GNU, которая имеет дело приятно с именами файлов, содержащими '"и пространством:

find | parallel touch

Посмотрите вводное видео для узнавания больше: Часть 1: обработка сценария Параллели GNU и выполнение

0
ответ дан 07.12.2019, 15:33

Теги

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