(... Verwenden Sie for i in ls
nicht
Es wird fehlschlagen, wenn eine Dateiname Leerzeichen enthält, und es ist unnötig for i in *
tut genau das, was Sie wollen, ohne die Notwendigkeit eines subprocess)
Die korrekte Syntax ist:
for fn in *; do
find /path/ -name "$fn" -type f -exec sed ... {} \; ;
done
\;
ist ein Argument zu finden. Sowohl {}
als auch ;
müssen als einzelne Argumente erscheinen. Wenn Sie {}\;
verwenden, kombiniert die Shell diese zu einem Argument und find
behandelt es als einfaches Argument für sed
. Die zweite ;
ist ein Shell-Metazeichen, das den Befehl find
beendet. Geschrieben wie oben, in drei Zeilen, ist die ;
nicht notwendig, aber wenn Sie einen Einzeiler wollen, wird es benötigt. Wenn Sie es entkommen, wie \;
, hört es auf, ein Shell-Metazeichen zu sein, und wird einfach an find
als ein Argument übergeben, wo es einen Fehler erstellen wird.
'für i in \ 'ls \'; finde/pfad/-name $ i -type f -exec sed -i "s/var Lenker/d" {} \; ; fertig; 'Das scheitert auch für mich. – papiro
@papiro Bitte lesen Sie meine Antwort erneut. Es erwähnt ausdrücklich diesen Fehler. – rici
'für mich in \ 'ls \' 'funktionierte ganz gut für mich (keiner meiner Dateinamen enthielt whitespace). – papiro