finden: Pfade müssen dem Ausdruck vorangehen: „.“ finden: mögliches nicht in Anführungszeichen gesetztes Muster nach dem Prädikat „-exec“?

finden: Pfade müssen dem Ausdruck vorangehen: „.“ finden: mögliches nicht in Anführungszeichen gesetztes Muster nach dem Prädikat „-exec“?

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 findkein zu durchlaufender Verzeichnisbaum ist find. Da die restlichen Parameter " findAusdrücke" sind, wird darüber gemeckert.

Der Befehl, den Sie -execausführen, muss mit einem Semikolon ( ;) abgeschlossen werden. Da jedoch ein Semikolon (die Analyse) des findBefehls beenden würde, -execmuss das Semikolon mit einem Backslash ( \) maskiert werden. Daher

-exec ...command... \; Willkommen in der Welt der „Find“-Magie. Lesen Sie „Man Find“ noch einmal.

Ihr sedAusdruck 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\itentspricht daher „ domain1it“, nicht „ domain1.it“. „ \i“ ist nichts Besonderes und wird daher wie „ i“ behandelt.

verwandte Informationen