Comment remplacer tout le contenu d'un dossier par un autre

23

J'ai des dossiers oldet new.

Je veux remplacer tout le contenu de old/*la new/*. Il peut y avoir de nombreux sous-répertoires dans ces dossiers.

Mais il peut y avoir peu de fichiers qui ne sont pas dans new/*mais qui le sont old/*, donc je veux qu'ils restent tels quels.

Comment puis-je faire cela à partir d'un shell Linux?

user105919
la source

Réponses:

18

rsync serait probablement une meilleure option ici. C'est aussi simple que rsync -a subdir / ./. vérifiez cette réponse unix.stackexchage pour de meilleures solutions

utiliser -favec la cpcommande

cp -fR /source/files /dest

supprimer cp pour écraser "invite ..

Pour remplacer l'alias de cp, vous pouvez simplement le mettre entre guillemets:

 'cp' -rf ./source/* /destination/

pour plus d'informations, suivez ces liens:

http://www.wallpaperama.com/forums/cp-command-problems-forcing-overwrite-using-cp-command-t5685.html

http://bytes.com/topic/unix/answers/865372-force-cp-overwrite-existing-directory

Niranjan Singh
la source
23

Utilisez rsync. Il synchronisera les répertoires dans une direction. Donc, si vous voulez mettre à jour votre olddossier avec tout new, mais garder ce qu'il contient, utilisez simplement:

rsync -avh --dry-run /path/to/new/ /path/to/old/

Cela va, dans un premier temps, simplement afficher la liste des fichiers qui seront transférés. Dans ce cas: tout ce qui se trouve dans newsera copié old, sauf s'il est déjà là. Tout oldreste tel quel.

Si cela vous semble bien, supprimez l' --dry-runargument pour les transmettre pour de vrai.

Les -avhindicateurs activent simplement le mode d'archivage (qui préservera les horodatages, etc.), la verbosité et les tailles de fichier lisibles par l'homme. Rien ne sera supprimé de la destination, sauf si vous spécifiez l' --deleteindicateur. Consultez man rsyncpour plus d'informations.

slhck
la source