Ich versuche zu verwenden , find
um echo 0
in einige Dateien, aber anscheinend funktioniert dies nur mit sh -c
:
find /proc/sys/net/ipv6 -name accept_ra -exec sh -c 'echo 0 > {}' \;
Bei der Verwendung von sh -c
with find -exec
fühle ich mich jedoch sehr unwohl, da ich den Verdacht habe, Probleme mit Zitaten zu haben. Ich habe ein bisschen damit herumgespielt und anscheinend war mein Verdacht berechtigt:
Mein Testaufbau:
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
Verwenden
find -exec
ohnesh -c
scheint ohne Probleme zu funktionieren - hier ist keine Angabe erforderlich:martin@dogmeat ~ % find findtest -type f -exec cat {} \; one two three
Aber wenn ich es benutze,
sh -c
{}
scheint es eine Art Zitat zu erfordern: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
Doppelte Anführungszeichen funktionieren, solange kein Dateiname doppelte Anführungszeichen enthält:
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
Einfache Anführungszeichen funktionieren, solange kein Dateiname einfache Anführungszeichen enthält:
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
Ich habe keine Lösung gefunden, die in allen Fällen funktioniert. Gibt es etwas , das ich mit Blick auf oder verwendet sh -c
in von find -exec
Natur aus unsicher?
sh
scheint eine Art Platzhalter zu sein, ist es auch , wenn ersetzt arbeitet_
beispielsweise - sehr nützlich , wenn Sie bash Interna nennen wollen:find /tmp -name 'fil*' -exec bash -c 'printf "%q\n" "$1"' _ {} \;
. Aber weiß jemand, wo dies dokumentiert ist?