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.
Svish
la source

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
coneslayer
la source
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/
Joel Aufrecht
la source
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

drew7721
la source
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