Ich möchte eine Reihe von Dateien von Verzeichnis A in Verzeichnis B kopieren, mit dem Vorbehalt, dass, wenn eine Datei in Verzeichnis A mit einer Datei in Verzeichnis B identisch ist, diese Datei nicht kopiert werden sollte (und daher ihre Änderungszeit nicht sein sollte) aktualisiert). Gibt es eine Möglichkeit, dies mit vorhandenen Tools zu tun, ohne dafür ein eigenes Skript zu schreiben?
Um ein wenig auf meinen Anwendungsfall einzugehen: Ich .c
erstelle automatisch eine Reihe von Dateien in einem temporären Verzeichnis (mit einer Methode, die alle Dateien bedingungslos generieren muss), und wenn ich sie erneut generiere, möchte ich nur kopieren Diejenigen, die sich in das eigentliche Quellverzeichnis geändert haben, lassen die unveränderten (mit ihren alten Erstellungszeiten) unberührt, make
damit Sie wissen, dass sie nicht neu kompiliert werden müssen. (Da es sich bei nicht allen generierten Dateien um .c
Dateien handelt, muss ich eher binäre Vergleiche als Textvergleiche durchführen.)
(Als Hinweis: Dies ergab sich aus der Frage, die ich unter https://stackoverflow.com/questions/8981552/speeding-up-file-comparions-with-cmp-on-cygwin/8981762#8981762 gestellt hatte , wo ich es versuchte Um die Skriptdatei zu beschleunigen, die ich für diese Operation verwendet habe, sollte ich mich wirklich fragen, ob es einen besseren Weg gibt, als mein eigenes Skript zu schreiben - zumal es eine einfache Möglichkeit gibt, dies in einer Shell zu tun Das Skript ruft so etwas wie cmp
für jedes Dateipaar auf, und das Starten all dieser Prozesse dauert zu lange.)
rsync -avnc
oder den langen Weg rsync --archive --verbose --dry-run --checksum
.
diff -qr dirA dirB
um zu sehen , welche Dateien sind einzigartigdirA
unddirB
, repectively.