web-dev-qa-db-fra.com

Copie de fichier récursive sans écrasement?

J'ai un répertoire qui contient un tas d'autres dossiers contenant des fichiers CoffeeScript/JavaScript. Je suis capable de compiler les fichiers CoffeeScript dans un nouveau dossier avec la même structure de dossier.

Ce que je veux faire, c'est copier tous les fichiers * .js du dossier source dans le dossier de destination de manière récursive. Je ne veux pas non plus écraser les fichiers déjà présents dans le dossier de destination. Des idées sur la façon d'accomplir cela?

J'ai essayé d'utiliser cp -n source/**.js desination/ et cp -Rn source/**.js desination/ après avoir examiné une autre question similaire, mais cela ne semble pas fonctionner.

Une idée comment accomplir ceci?

19
AlbertEngelB

Vous pouvez utiliser rsync (il fait aussi la copie locale)

rsync -r --ignore-existing --include=*/ --include=*.js --exclude=* source/ destination
  • -r pour recurse dans des répertoires,
  • --ignore-existing pour ignorer les fichiers existants dans la destination,
  • les filtres include et exclude signifient: inclure tous les répertoires, inclure tous les fichiers * .js, exclure le reste; la première inclusion est nécessaire, sinon l'exclusion finale exclura également les répertoires avant que leur contenu ne soit analysé.

Enfin, vous pouvez ajouter un -P si vous souhaitez suivre les progrès, un --list-only si vous souhaitez voir ce qu'il copiera sans copier, et un -t si vous souhaitez conserver les horodatages.


Ceci n'est pas lié, mais j'ai récemment appris la commande rsync, lorsque j'ai déplacé 15 ans de documents d'une partition à une autre. Confiant que mes fichiers étaient là, j'ai ensuite effacé l'ancienne partition et y ai ajouté d'autres éléments; J'ai réalisé plus tard que j'avais perdu tous les horodatages et découvert le drapeau -t. Je voulais juste partager ma détresse: '(

21
bonob

Ceci est également réalisable en utilisant cp. Vois ici:

Sudo cp -vnpr /xxx/* /yyy

xxx = source

yyy = destination

v = verbeux

n = pas de clobber (pas d'écrasement)

p = préserver les autorisations

r = récursif

5
SEMbyotic

En regardant les pages de manuel, il semble que vous souhaitiez l’option -n.

-n, --no-clobber
   do not overwrite an existing file (overrides the previous -i option)
5
tantalum