GNU find의 매뉴얼 페이지는 다음과 같습니다.
-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까지입니다.
이제 나는 이것을 bash와 dash로 테스트했으며 둘 다 {}
마스크 될 필요는 없습니다 . 간단한 테스트는 다음과 같습니다.
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
그러나 그것은 맨 페이지가 말하는 것이 아닙니다. 그렇지 않습니까? 어떤 쉘 {}
이 다른 방식으로 취급 됩니까?