GNU’nun man sayfası şu durumları bulur:
-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.
Bu adamdan find
(GNU bulgusuna kadar) 4.4.2.
Şimdi bunu bash ve dash ile test ettim ve her ikisinin {}
de maskelenmesine gerek yok . İşte basit bir test:
find /etc -name "hosts" -exec md5sum {} \;
Diş tellerini maskelemem gereken bir kabuk var mı? Unutmayın, bulunan dosyanın boş (bashtan çağrılmış) içerip içermediğine bağlı değildir
find ~ -maxdepth 1 -type d -name "U*" -exec ls -d {} \;
/home/stefan/Ubuntu One
Bu, bulunan dosya bir alt kabuğa geçirilirse değişir:
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
hangi tarafından çözülebilir:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "$0"' {} \;
kıyasla:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "{}"' \;
/home/stefan/Ubuntu One
ama bu man sayfasının bahsettiği şey değil, değil mi? Peki hangi kabuk {}
farklı şekilde davranıyor ?