rsync
serait un mauvais choix car il fait beaucoup de travail en arrière-plan client/serveur qui tient compte des systèmes locaux et distants.
mv
est probablement le meilleur choix. Si possible, vous devriez essayer mv directory_old directory_new
plutôt que mv directory_old/* directory_new/
. De cette façon, vous déplacez une chose au lieu d'un million de choses.
find src_image_dir/ -type f -name '*.jpg' -print0 | xargs -0r mv -t dst_image_dir/
- Cela ne débordera pas sur l'expansion des arguments.
- Vous pouvez spécifier l'extension du fichier, si vous le souhaitez. (-nom ...)
find -print0
avecxargs -0
vous permet d'utiliser des espaces dans les noms.xargs -r
n'exécutera pasmv
à moins qu'il y ait quelque chose à déplacer. (mv
se plaindra si aucun fichier source n'est fourni).- La syntaxe
mv -t
vous permet de spécifier d'abord la destination puis les fichiers source, nécessaires àxargs
. - Déplacer tout le répertoire est bien sûr beaucoup plus rapide, puisqu'il s'effectue en temps constant quel que soit le nombre de fichiers qu'il contient, mais :
- le répertoire source disparaîtra pendant une fraction de temps et cela pourrait vous créer des problèmes ;
- si le processus utilise le répertoire courant comme répertoire de sortie (contrairement à toujours se référer à un chemin complet à partir d'un emplacement immobile), vous devrez le relancer. (comme vous le faites avec la rotation des journaux ).
D'ailleurs, je me demanderais si je dois vraiment déplacer une telle quantité de fichiers à la fois. Le traitement par lots est surestimé. J'essaie de ne pas accumuler d'énormes quantités de travail si je peux traiter les choses au moment où elles sont générées.
Si les deux répertoires résident sur le même système de fichiers, utilisez mv
sur le RÉPERTOIRE et non sur le contenu du répertoire.
S'ils résident sur deux systèmes de fichiers différents, utilisez rsync :
rsync -av /source/directory/ /destination
Remarquez le /
à la fin sur la source. Cela signifie qu'il copiera le CONTENU du répertoire et non le répertoire lui-même. Si vous laissez le /
off, il copiera toujours les fichiers mais ils resteront dans un répertoire nommé /destination/directory
. Avec le /, les fichiers seront juste en /destination
rsync
conservera la propriété du fichier si vous l'exécutez en tant que root ou si les fichiers vous appartiennent. Il maintiendra également le mtime
de chaque fichier individuel.