Unix: comment fusionner deux répertoires


17

Disons que j'ai deux dossiers avec un contenu varié, fooet bar. Comment puis - je fusionner baren foosorte que:

  • Les fichiers fooqui n'y figurent pas barsont intacts.
  • Les fichiers barqui ne sont pas en foosont maintenant dans foo.
  • Les fichiers fooqui se trouvent également dans baront été remplacés par les fichiers de bar.

Réponses:


25

Si je lis correctement vos exigences, aucun fichier ne va de fooà bar. Il semble que vous puissiez simplement copier le contenu de bardans foo, en le laissant remplacer les fichiers si nécessaire (son comportement par défaut).

$ cp -R /path/to/bar/* /path/to/foo

Ouais, ce dont j'étais incertain, c'était la récursivité et comment ne pas finir avec juste une barre à l'intérieur de foo comme foo / bar. Mais cela semble être ce que je veux :)
Svish

1
Bon, si vous venez de le faire, cp -R /path/to/bar /path/to/foocela créerait un répertoire à l' barintérieur foo. Point subtil.
coneslayer

1
Remarque: il omettra les fichiers / répertoires cachés dans bar(c'est-à-dire avec les noms commençant par un point - .) en raison de la façon dont fonctionne le globbing shell.
Kamil Maciorowski

9

J'ai eu un besoin très similaire: fusion bardans foomais les fichiers qui sont bar ne doivent pas Écraser les fichiers correspondants dans foo. Dans ce cas:

$ cp -R -n /path/to/bar/* /path/to/foo/

1

Essaye ça :

$ cp -r-u-v /path/to/foo/* /path/to/bar/

À partir de man cp
-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
-R, -r, - répertoires de copie récursive récursivement


1
Deux personnes ont déjà suggéré la commande cp et votre réponse semble donc superflue. Prendre quelques minutes pour expliquer comment les arguments que vous avez sélectionnés font un meilleur travail que les autres suggestions vous aideront à rendre votre réponse plus utile.
music2myear

1
L'indicateur -u n'est mis à jour que si le fichier de la source est plus récent que celui de la destination. Voir: man cp -> -u, --update: copier uniquement lorsque le fichier SOURCE est plus récent que le fichier de destination ou lorsque le fichier de destination est manquant
drew7721

Ajoutez ces informations à la question (utilisez Modifier juste en dessous de votre message) afin que les gens puissent voir ces informations utiles dans la réponse elle-même.
music2myear
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.