Suchen und ersetzen Sie alle gleichen Dateien zwischen 2 Verzeichnissen

Suchen und ersetzen Sie alle gleichen Dateien zwischen 2 Verzeichnissen

Ich möchte alle Dateien in finden, die dir1entsprechend gleiche Dateinamen in haben dir2, und sie durch die Dateien aus ersetzen dir2.

Zum Beispiel:

dir1: first.txt second.txt
dir2: third.txt first.txt

Daher möchte ich es aus dir1der alten Datei entfernen und durch aus first.txtersetzen .first.txtdir2

Wie erreicht man dies mit dem Bash-Terminal?

Antwort1

Tatsächlich gibt es einen einzigen Befehl, der genau das tut, was Sie verlangen.

rsync -av --existing dir2/ dir1/

Dadurch werden die Dateien nur dann rekursiv von Verzeichnis 2 in Verzeichnis 1 kopiert, wenn die Datei bereits in Verzeichnis 1 vorhanden ist.

Bei den -avOptionen handelt es sich um die Optionen, die Sie normalerweise zum Kopieren von Dateien mit rsync verwenden.

Die --existingOption weist darauf hin rsync, dass das Erstellen neuer Dateien auf dem Empfänger übersprungen werden soll.

Sie müssen in der Befehlszeile den abschließenden Schrägstrich auf „dir2/“ verwenden, da rsyncsich der Schrägstrich für rsync anders verhält als die meisten Befehle und eine Bedeutung hat.

rsynckann ähnlich wie auch über das Netzwerk verwendet werden scp.

rsynckann viele andere Arten von Dateisynchronisierungs-, Aktualisierungs- und Sicherungsaufgaben verarbeiten.

Antwort2

rsync kann dies mit der --existingOption:

rsync -v --existing dir2/* dir1/

verwandte Informationen