GNU/Linux >> Tutoriels Linux >  >> Linux

Quel est le moyen le plus rapide de déplacer un million d'images d'un répertoire à un autre sous Linux ?

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 avec xargs -0 vous permet d'utiliser des espaces dans les noms.
  • xargs -r n'exécutera pas mv à 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.


Linux
  1. Linux - Comment inspecter les informations de structure de répertoire d'un fichier Unix/linux ?

  2. Le moyen le plus rapide d'extraire un iso ?

  3. Comment déplacer (et écraser) tous les fichiers d'un répertoire à un autre ?

  4. Comment copier les 10 fichiers les plus récents d'un répertoire à un autre ?

  5. Existe-t-il un moyen simple de déplacer/copier un volume logique d'un groupe de volumes à un autre ? (LVM2)

Comment copier un fichier d'un autre répertoire vers celui en cours ?

Chemin absolu ou relatif sous Linux :quelle est la différence ?

Quel est l'équivalent d'Active Directory sous Linux

Déplacer un volume logique d'un groupe de volumes à un autre

Quel est le moyen le plus rapide de supprimer tous les fichiers et sous-dossiers d'un répertoire ?

Quel est le moyen le plus rapide d'exécuter un script ?