У меня есть эта команда:
find $1 | xargs touch
Но файлы с '
символы на их имена перестали работать с "xargs: несопоставленная одинарная кавычка", и я предполагаю, что другие специальные символы вызвали бы ту же проблему.
Как я могу выйти из вывода так эта команда работы со всеми именами файлов?
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.
Вот более простое, более быстрое и большая часть портативного способа сделать это:
find $1 -exec touch {} +
Отметьте +
конечный синтаксис. В отличие от более популярного \;
exec
конечный синтаксис, +
упаковывает аргументы тот же путь xargs
делает.
По сравнению с часто предлагаемым find ... | xargs ...
, это find
только решение более эффективно потому что:
Будучи совместимым POSIX, это также работает с большинством если не весь ток find
реализации, в отличие от этого, find -print0
и xargs -0
которые являются оба GNUisms.
Если Ваш вход не от find
, но из некоторой другой генерирующей строку программы, можно хотеть взглянуть на Параллель GNU, которая имеет дело приятно с именами файлов, содержащими '"и пространством:
find | parallel touch
Посмотрите вводное видео для узнавания больше: Часть 1: обработка сценария Параллели GNU и выполнение