Come posso copiare una (grande) directory su un'altra cambiando solo i file che differiscono?


14

Ho directory a e directory b. Sono grandi. b è quasi identico a a. "quasi" significa che i file 4-5 differiscono e non so quali siano. Voglio copiare b su a, ma solo i file che differiscono. sono a bash.

(no, non posso semplicemente eliminare a e sostituirlo con b, perché 1) a è controllato dalla versione 2) una copia completa (o un mv) richiederebbe troppo. Voglio copiare solo i file che differiscono).


È rsyncun'opzione?
Bobby,

Lo è, ma non so molto di rsync.
Janesconference,

Risposte:


17

Puoi usare rsyncper fare questo, il comando che uso èrsync -tr "folder to copy from" "folder to copy to"

per esempio rsync -tr /home/me/stuff/* /home/me/otherstuff/


1
ATTENZIONE a questo comando. Eliminerà tutti i file che non differiranno. L'ho eseguito e PERSO quasi tutto !!
Arvind K.

@Arvind Non so quale comando hai usato per farti perdere i tuoi dati ma non era rsync -tr. Leggi la pagina man.
Tog

18

È anche possibile farlo con un buon vecchio cp:

Grazie a srcspider per avermi ricordato di usare -T!

cp -ruT old-dir new-dir


+1 Mi abituo così tanto alla sincronizzazione tra macchine che dimentico i modi eleganti.
Tog

non funziona per me :(
janesconference,

Questo è in realtà un buon gnu cp. ;-)
Keith

1
Su OS X, l'opzione -u non esiste. Ho semplicemente usato cp -r old-dir new-dir, poiché non ho dovuto confrontare le date.
Jean-François Beauchamp,

Non funziona. Non sono sicuro che si tratti di una convenzione sui nomi, ma cp -ru cartella-A cartella-B copierà semplicemente la cartella-A all'interno della cartella-B non copierà il contenuto di A all'interno di B e lo sovrascriverà, il che sarebbe l'effetto desiderato.
srcspider,

1

Un'altra buona opzione è Unison ( http://www.cis.upenn.edu/~bcpierce/unison/ ), in particolare se in realtà non esiste una "fonte" e una "destinazione". Ogni directory è una radice e Unison le sincronizza e mantiene i metadati per future sincronizzazioni. Offre sia una riga di comando che un'opzione della GUI che può essere facilmente programmata anche tramite cron.

Lo uso per fare un backup del mio Dropbox sul mio dispositivo NAS locale che non può eseguire un client Dropbox.


1

Può essere fatto con un buon vecchio cp, anche se con un formato leggermente diverso da quello sopra indicato. Ecco come l'ho fatto:

cp -ru --target-directory="destination_path" source_path/*

1

È possibile diff le 2 directory.

diff -r dir1 dir2

ti mostrerà l'elenco dei file che sono differnet

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.