Для конкретного случая пробелов и одинарных кавычек должно быть достаточно заключить строку в двойные кавычки:
$ find -name 'Aujour*' -printf "%f\n" | awk '{system("ls -l \""$0"\"")}'
-rw-rw-r-- 1 user user 0 May 26 11:27 Aujourd'hui C'est Toi (Orchestral).flac
В качестве альтернативы, если ваша оболочка предоставляет спецификатор формата кавычек оболочки -, вы можете использовать его вместо find
внутреннего-printf
:
$ find -name 'Aujour*' -exec printf '%q\n' {} \; | awk '{system("ls -l "$0)}'
-rw-rw-r-- 1 user user 0 May 26 11:27./Aujourd'hui C'est Toi (Orchestral).flac
Из help printf
в bash
, например:
%q quote the argument in a way that can be reused as shell input
Здесь string для более коротких строк, здесь document для более длинных. Дополнительная особенность здесь документов заключается в том, что вы можете передавать произвольный текст, не беспокоясь о цитировании. Просто -укажите разделитель в кавычках и убедитесь, что он не отображается в тексте. Вы можете использовать случайную строку (, составленную из символов и цифр ), метод, который также используется для разграничения частей в электронной почте, закодированной MIME.