На головній сторінці пошуку GNU зазначено:
-exec command ; [...] The string `{}' is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a `\') or quoted to protect them from expansion by the shell.
Це від людини до find
(GNU findutils) 4.4.2.
Тепер я перевірив це з нахилом і тире, і обом не потрібно, щоб {}
маска була замаскована. Ось простий тест:
find /etc -name "hosts" -exec md5sum {} \;
Чи є оболонка, для якої мені справді потрібно замаскувати брекети? Зауважте, що це не залежить від того, чи вміщений файл містить порожню (викликається з bash):
find ~ -maxdepth 1 -type d -name "U*" -exec ls -d {} \;
/home/stefan/Ubuntu One
Це змінюється, якщо знайдений файл передається підпакеті:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d {}' \;
ls: cannot access /home/stefan/Ubuntu: No such file or directory
ls: cannot access One: No such file or directory
яку можна вирішити:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "$0"' {} \;
на відміну від:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "{}"' \;
/home/stefan/Ubuntu One
але це не те, про що розповідає сторінка людини, чи не так? То яка оболонка трактує {}
по-іншому?