Ich muss diesen Befehl im Hintergrund ausführen
sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' \; . &
aber ich habe zwei Probleme:
find: paths must precede expression: `.'
find: possible unquoted pattern after predicate `-exec'?
Und es gibt noch weitere clevere Möglichkeiten, um schneller zu „suchen und zu ersetzen“. Dazu können Sie Folgendes tun:sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' ; &vielleicht mit grep?
Danke
Antwort1
Ist /abc/abc/
ein Verzeichnis vorhanden? Wo sind die zu suchenden Dateien? Die paths must preceed..
Meldung " " ist eine Kryptomeldung. Entschlüsselt bedeutet sie, dass der erste (oder die ersten mehreren) Parameter find
kein zu durchlaufender Verzeichnisbaum ist find
. Da die restlichen Parameter " find
Ausdrücke" sind, wird darüber gemeckert.
Der Befehl, den Sie -exec
ausführen, muss mit einem Semikolon ( ;
) abgeschlossen werden. Da jedoch ein Semikolon (die Analyse) des find
Befehls beenden würde, -exec
muss das Semikolon mit einem Backslash ( \
) maskiert werden. Daher
-exec ...command... \;
Willkommen in der Welt der „Find“-Magie. Lesen Sie „Man Find“ noch einmal.
Ihr sed
Ausdruck ist falsch. Er müsste lauten:
sed -e 's/domain1\.it/domain2\.com/'
Der Backslash ( \
) dreht einfach das Flag „Sonderbehandlung“ für das nächste Zeichen um und domain1\it
entspricht daher „ domain1it
“, nicht „ domain1.it
“. „ \i
“ ist nichts Besonderes und wird daher wie „ i
“ behandelt.