Я хотел бы использовать find внутри подстановки команд, где возвращаемые имена файлов содержат пробелы. Какой параметр мне нужен, чтобы он правильно цитировал имена файлов? Я пробовал -print0
, но он не будет работать в самой оболочке.Использование find (1) в подстановке команд и цитировании имен файлов с пробелами
пример:
command $(find . -type f) some other params
Я также попытался с -exec echo "{}" \;
, но это не поможет ни.
Если я использую set -x
для отображения расширения оболочки и фактической команды, которая выполняется я получаю:
$ command `find -type f -printf \"%p\"\ ` some other params
++ find -type f -printf '"%p" '
+ command '"./file_with' 'blanks"' '"./another' 'file"' some other params
Где одинарные кавычки, приезжающие и почему они применяются к каждому «слову» ?
Знаешь о xargs? 'найти. -тип f -print0 | xargs -0 yourCmd выбирает'? xargs будет «подавать» N количество выходов из find в 'yourCmd' и продолжать повторяться до тех пор, пока не будет выполнен весь вывод. Xargs - предпочтительный способ передать вывод вывода команде в GnuLinux (не так много в старой Unix Solaris/HP/etc). Может быть что-то о 'yourCmd', которое мешает этому работать, но выше - это место для начала. Удачи. – shellter
Я знаю 'xargs' (должен был упомянуть в вопросе), но команда должна выполняться только один раз, а не один раз для каждого входного файла. Мне нужен полный список файлов, переданный команде за один шаг. (пробовал '-L' и' -n' из xargs) – knittl
моя точка в отношении «xargs будет подавать N количество выходных данных» означает, что xargs будет выставлять yourCmd с таким количеством аргументов, которое может поместиться при одном выполнении командной строки И только повторить yourCmd, если необходимо (и столько раз, сколько необходимо). правильно? Если вам нужно обработать 100000 файлов, использование 'yourCmd $ (find. -type f)' будет работать, вы получите сообщение msg как «слишком много имен файлов» Xargs призван помочь решить эту проблему, выполнив команду yourCmd как можно меньше. Учитывая список из 10 файлов через xargs, yourCmd будет работать только 1 раз, а не 10 x. Удачи. – shellter