Comment copier récursivement un répertoire dans un autre et remplacer uniquement les fichiers qui n'ont pas changé?

StackOverflow https://stackoverflow.com/questions/601247

Question

Je souhaite réaliser une copie spécifique dans Fedora.

J'ai deux dossiers:

  • 'racine Web': conserve TOUS les fichiers / images Web, etc.

  • 'export': dossier contenant des milliers de documents PHP, CSS et JS exportés à partir de mon référentiel SVN.

Le répertoire d'exportation contient la plupart des fichiers / dossiers identiques à ceux de la racine. Toutefois, la racine contient d'autres fichiers / dossiers introuvables dans l'exportation.

Je souhaite fusionner tout le contenu de l'exportation avec ma racine Web avec les options suivantes:

  1. Écraser le fichier dans webroot si la version de l'export contient un code différent de celui est à l'intérieur de la version de webroot (live)
  2. Conservez les autorisations / utilisateurs / groupes du fichier s'il est écrasé (le fichier d'exportation version remplaçant la version en direct) * NOTE Je souhaite que les droits / droits de propriété de Webroots soient conservés, mais avec le contenu de l'exportation
  3. Aucune invite / arrêt de la copie de toute sorte (c'est-à-dire non verbeux)
  4. Copie récursive - évidemment je aimerait copier tous les fichiers * dossiers et sous-dossiers trouvés dans exportation

J'ai fait un peu de recherche sur cp - est-ce que cela ferait le travail ?:

cp -pruf ./export /path/to/webroot
Était-ce utile?

La solution

Peut-être, mais chaque fois que les fichiers correspondants dans exportation et racine Web ont le même contenu mais des temps de modification différents, vous finissez par effectuer une opération de copie inutile. Vous obtiendrez probablement un comportement légèrement plus intelligent de rsync :

rsync -pr ./export /path/to/webroot

De plus, rsync peut copier des fichiers d'un hôte à un autre via une connexion SSH, si vous en avez déjà besoin. De plus, il dispose de zillions d’options que vous pouvez spécifier pour modifier son comportement - consultez la page de manuel pour plus de détails.

EDIT : en ce qui concerne votre clarification de ce que vous entendez par préservation des autorisations: vous voudrez probablement laisser l'option -p .

Autres conseils

  1. -u écrase le dossier des fichiers existants si la destination est antérieure à la source
  2. -p conserve l'autorisation et les dates
  3. -f désactive la verbosité
  4. -r rend la copie récursive

On dirait que vous avez tous les arguments corrects à cp

Cela ressemble à un travail pour cpio (et donc, probablement, GNU tar peut le faire aussi):

cd export
find . -print | cpio -pvdm /path/to/webroot

Si vous avez besoin que les propriétaires soient préservés, vous devez le faire en tant que root, bien sûr. L'option -p est "mode de transfert", ce qui signifie copie entre les emplacements; -v est commenté (mais pas interactif; il y a une différence); -d signifie créer des répertoires si nécessaire; -m signifie conserver l'heure de modification. Par défaut, sans l'option -u , cpio ne remplacera pas les fichiers de la zone cible plus récents que ceux de la zone source.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top