Copier uniquement les nouveaux fichiers - est-ce possible? Vous voulez essentiellement fusionner deux dossiers

14

J'ai un dossier sur le lecteur 1 appelé Musique, et il fait 100 Go. J'ai un dossier sur Drive 2 appelé Music, et il fait 116 Go. C'est la version la plus récente. Comment copier le dossier Musique du lecteur 2 vers le lecteur 1 sans avoir à réécrire chaque fichier?

dallen
la source
Quelle version d'OS X utilisez-vous?
Nix
1
J'utilise 10.7.4. Lorsque je copie le dossier d'un lecteur à l'autre, on me demande si je veux le remplacer. Aucune option de fusion.
dallen

Réponses:

5

L'option de fusion n'apparaîtra que si vous copiez (plutôt que déplacez) le dossier. Assurez-vous que vous maintenez optionpendant que vous faites glisser le nouveau dossier vers l'emplacement de l'ancien dossier. Alternativement, utiliser + cpour copier le nouveau dossier et + vpour coller sur l'ancien dossier devrait vous donner la possibilité de fusionner les fichiers.

Rien
la source
Cela semble toujours écraser les fichiers qui n'ont pas besoin d'être réécrits. Utiliser à la rsyncplace
BRogers
Même si l'option de fusion est disponible, cela ne fonctionne parfois pas (signale simplement une erreur et ne fait rien) - en particulier dans le cas de gros dossiers comme dans votre cas. C'est une autre raison pour laquelle vous devriez utiliser rsync.
Andrzej Martyna
24

Ceci est un cas d'utilisation classique pour rsync:

rsync -av /source-path/source-dir /destination-path

rsync copiera uniquement les fichiers nouveaux et modifiés vers le nouvel emplacement.

Il est important de comprendre le fonctionnement d'une barre oblique de fin sur l'argument source. S'il y a une barre oblique, le contenu de / source-path / source-dir sera copié dans destination-path . S'il n'y a pas de barre oblique, le répertoire source lui- même sera copié vers la destination et son contenu se trouvera à un autre niveau dans la hiérarchie de destination.

Donc, si vous souhaitez répliquer un chemin vers un autre, incluez la barre oblique suivante comme suit:

rsync -av /sourcepath/sourcedir/ /duplicatpath/sourcedir/
John D.
la source
1
Superbe capture! Et si vous faites cela à partir de plusieurs lecteurs (ou n'importe où sur votre ordinateur) et que vous ne voulez pas taper les répertoires, vous pouvez simplement faire glisser un lecteur (USB externe ou capsule temporelle) ou simplement un répertoire spécifique et l'ajouter à la commande pour vous.
Faites
Mec, merci beaucoup d'avoir suggéré la barre oblique de fin. J'ai passé la nôtre à réfléchir à pourquoi rsync -av ./foo/bar / vol1 / foo / bar copiait tous les fichiers existants. Bloody slashes lol !!!
sming
4

MISE À JOUR

Installez d'abord coreutils en premier. Courez brew install coreutils. Si vous ne l'avez pas brewinstallé ... revenez à Windows!

Vérifiez que les cp --versionsorties de la version cp (GNU coreutils) 8. ^^

Ensuite, vous aurez la bonne cpversion et le -udrapeau fonctionnera.


Vérifiez la cpcommande. Utilisez man cpet lisez les options. Vous pouvez faire quelque chose comme:

cp -r -u ~/source ~/destination

-R, -r , --recursive: copie les répertoires de manière récursive
-u , --update: copie uniquement lorsque le fichier SOURCE est plus récent que le fichier de destination ou lorsque le fichier de destination est manquant
-p comme --preserve = mode, propriété , horodatages
-v --verbose: expliquer ce qui se fait

Donc, si vous souhaitez copier des fichiers à partir de votre dossier Téléchargements / musique pour dire votre dossier Musique / nouveau , vous feriez quelque chose comme ceci : cela fusionnerait le contenu de ces deux dossiers et si deux fichiers avec le même nom et le même chemin existaient, il conserverait le le plus récent basé sur l'horodatage.
cp -ruvp ~/Downloads/music/* ~/Music/new/

drew7721
la source
Êtes-vous sûr que l'option -u fonctionne avec la commande cp dans OSX? Je reçois le message "cp: option illégale - u" dans Sierra. Il semble que toutes les commandes ne soient pas les mêmes que sous Linux.
OMA
Essayez la commande cp --help et voyez si l'option est disponible. Ou vérifiez la version cp - et assurez-vous qu'elle est à jour. J'utilise: cp (GNU coreutils) 8.27
drew7721
Malheureusement, -u n'est pas un indicateur valide pour cp sur OS X. Il serait très pratique de l'avoir!
Per Quested Aronsson
Malheureusement, cette réponse est incorrecte.
William Cerniuk
utiliser brew install coreutilspour obtenir la bonne cpversion.
drew7721
0

Je ne sais pas pourquoi le bouton Lion Merge par défaut ne s'affiche pas pour moi. Mais j'ai fini par utiliser ditto. Trouvé ici: https://superuser.com/a/221599/102789

dallen
la source
1
FAITES ATTENTION! idem ne conserve pas les fichiers les plus récents, il écrase toujours la destination avec la source. Si le fichier source est plus ancien, il supprimera le nouveau fichier et le remplacera par un fichier plus ancien
FrancescoMM
c'est vrai - avertissement très important de FrancescoMM, utilisez rsync
Andrzej Martyna