Die Manpage für GNU find lautet:
-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.
Das ist vom Mann bis find
(GNU findutils) 4.4.2.
Jetzt habe ich dies mit Bash und Dash getestet, und beide müssen nicht {}
maskiert sein. Hier ist ein einfacher Test:
find /etc -name "hosts" -exec md5sum {} \;
Gibt es eine Muschel, für die ich die Zahnspangen wirklich maskieren muss? Beachten Sie, dass es nicht davon abhängt, ob die gefundene Datei ein Leerzeichen enthält (wird von bash aufgerufen):
find ~ -maxdepth 1 -type d -name "U*" -exec ls -d {} \;
/home/stefan/Ubuntu One
Dies ändert sich, wenn die gefundene Datei an eine Subshell übergeben wird:
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
was gelöst werden kann durch:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "$0"' {} \;
im Kontrast zu:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "{}"' \;
/home/stefan/Ubuntu One
Aber darum geht es doch nicht in der Manpage, oder? Also, welche Muschel behandelt {}
auf eine andere Art und Weise?