Ich möchte alle Dateien in finden, die dir1
entsprechend 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 dir1
der alten Datei entfernen und durch aus first.txt
ersetzen .first.txt
dir2
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 -av
Optionen handelt es sich um die Optionen, die Sie normalerweise zum Kopieren von Dateien mit rsync verwenden.
Die --existing
Option 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 rsync
sich der Schrägstrich für rsync anders verhält als die meisten Befehle und eine Bedeutung hat.
rsync
kann ähnlich wie auch über das Netzwerk verwendet werden scp
.
rsync
kann viele andere Arten von Dateisynchronisierungs-, Aktualisierungs- und Sicherungsaufgaben verarbeiten.
Antwort2
rsync kann dies mit der --existing
Option:
rsync -v --existing dir2/* dir1/