내가 사용하려고 해요 find
로 echo 0
일부 파일에,하지만 분명히 이것은 단지와 함께 작동합니다 sh -c
:
find /proc/sys/net/ipv6 -name accept_ra -exec sh -c 'echo 0 > {}' \;
그러나 sh -c
with find -exec
을 사용 하면 인용 문제가 의심되므로 매우 불편합니다. 나는 그것으로 조금 바이올린을 썼고 분명히 내 의심은 정당화되었다.
내 테스트 설정 :
martin@dogmeat ~ % cd findtest martin@dogmeat ~/findtest % echo one > file\ with\ spaces martin@dogmeat ~/findtest % echo two > file\ with\ \'single\ quotes\' martin@dogmeat ~/findtest % echo three > file\ with\ \"double\ quotes\" martin@dogmeat ~/findtest % ll insgesamt 12K -rw-rw-r-- 1 martin martin 6 Sep 17 12:01 file with "double quotes" -rw-rw-r-- 1 martin martin 4 Sep 17 12:01 file with 'single quotes' -rw-rw-r-- 1 martin martin 4 Sep 17 12:01 file with spaces
find -exec
없이 사용하면sh -c
문제없이 작동하는 것 같습니다.martin@dogmeat ~ % find findtest -type f -exec cat {} \; one two three
그러나 내가 사용할 때
sh -c
{}
어떤 종류의 인용이 필요한 것 같습니다.martin@dogmeat ~ % LANG=C find findtest -type f -exec sh -c 'cat {}' \; cat: findtest/file: No such file or directory cat: with: No such file or directory cat: spaces: No such file or directory cat: findtest/file: No such file or directory cat: with: No such file or directory cat: single quotes: No such file or directory cat: findtest/file: No such file or directory cat: with: No such file or directory cat: double quotes: No such file or directory
큰 따옴표는 파일 이름에 큰 따옴표가없는 한 작동합니다.
martin@dogmeat ~ % LANG=C find findtest -type f -exec sh -c 'cat "{}"' \; one two cat: findtest/file with double: No such file or directory cat: quotes: No such file or directory
작은 따옴표는 파일 이름에 작은 따옴표가 포함되지 않는 한 작동합니다.
martin@dogmeat ~ % LANG=C find findtest -type f -exec sh -c "cat '{}'" \; one cat: findtest/file with single: No such file or directory cat: quotes: No such file or directory three
모든 경우에 작동하는 솔루션을 찾지 못했습니다. 내가 간과하거나 본질적으로 안전하지 않은 것을 사용 sh -c
하고 find -exec
있습니까?
sh
는 일종의 자리 표시 자 인 것 같습니다._
예를 들어 대체하면 작동합니다 -bash internals를 호출하려는 경우 매우 유용합니다find /tmp -name 'fil*' -exec bash -c 'printf "%q\n" "$1"' _ {} \;
. 그러나 이것이 어디에 기록되어 있는지 아는 사람이 있습니까?