14 votes

Déplacement d'un grand nombre de fichiers (~ 100 000)

Je travaille avec des dossiers qui contiennent beaucoup de fichiers, comme 100 000 ou même 1 000 000 de fichiers par dossier. Lorsque j'essaie de déplacer le contenu d'un dossier dans un autre, mon ordinateur se bloque toujours. Même lorsque le processus semble terminé, je ne peux pas voir le contenu d'un dossier car Nautilus semble complètement gelé et je dois forcer mon ordinateur à redémarrer. J'ai remarqué que cela se produit également lorsque j'essaie de déplacer environ 10 000 fichiers.

Est-ce un problème de mon ordinateur ou est-ce normal quand on travaille avec ces chiffres ?

Y a-t-il un moyen intelligent d'effectuer ce transfert de fichiers ?

19voto

Shaun Bohannon Points 271

Envisagez peut-être d'utiliser une méthode de ligne de commande pure pour transférer de très grandes quantités de fichiers, vous trouverez sans doute que le processus est substantiellement plus rapide que l'utilisation d'un gui.

Il existe de nombreuses façons de procéder, mais la méthode suivante a fonctionné rapidement, en toute sécurité et efficacement sur mon système :

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

Une explication pour cette commande :

  1. Votre répertoire d'entrée est le caractère '.' et pour cette commande particulière, vous devez vous trouver dans ce répertoire.
  2. Votre répertoire de sortie est le <destination> dans mon exemple. Vous pouvez évidemment le modifier pour l'adapter à vos besoins et supprimer les parenthèses.
  3. Cette syntaxe permet d'utiliser des noms de fichiers avec des espaces en prime :)

Des permutations infinies sont possibles mais cela devrait bien fonctionner et de manière beaucoup plus efficace que le gui. Une permutation par exemple : si vous vouliez déplacer sólo des fichiers pdf que vous pourriez exécuter :

find . -iname "*.pdf" -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

Utilisation de xargs ouvre de nombreuses possibilités, notamment avec le déplacement d'un si grand nombre de fichiers. Beaucoup, beaucoup de possibilités....

Problèmes potentiels :

Il y a au moins deux pièges potentiels à considérer, merci aux commentateurs ci-dessous pour ces réflexions :

  1. Votre répertoire de destination peut être corrompu, se trouver dans un endroit inaccessible par la suite, avoir été mal saisi, etc. mv déplacera quand même les fichiers à cet endroit ! Faites attention...
  2. Si le -t option ( --target-directory ) est manquant et que le dossier de destination est en fait un fichier, vous déplacerez un fichier et échouerez pour le reste. mv a 2 utilisations : renommer de la source à la destination ou déplacer source pour répertoire . Encore une fois, faites attention...

4voto

user.dz Points 45060

J'ai eu une expérience similaire auparavant, c'est normal lorsqu'on a affaire à un grand nombre de fichiers. J'avais une grande collection de fiches de données PDF (pièces électroniques).

Les outils GUI vérifient certains détails du fichier et méta-données (Icône/Thumbnail, Taille, ...), ce sera un gros problème dans ce cas. Même en Vue des icônes et sans vignettes, ils se figeront car la plupart d'entre eux ne sont pas conçus pour un cas aussi extrême. Les outils GUI essaient de charger des icônes de présentation pour tous les fichiers/dossiers du répertoire, même si ces éléments ne sont pas visibles pour l'utilisateur dans la partie courante de l'écran. Triage fait également partie du problème et il n'y a aucun moyen de l'éviter.

  • J'ai fini par répartir les fichiers dans des dossiers séparés en fonction de la marque et du modèle (moins de 10000 chacun). Vous pouvez peut-être utiliser la date (comme la plupart des gens le font avec les photos/scans) ou la ou les premières lettres (comme dans Dépôt de paquets Ubuntu )
  • Il est plus facile d'utiliser les outils CLI car ils ne montrent que ce que vous avez demandé. Vous pouvez utiliser locate pour une recherche rapide au lieu de find .
  • Pour l'opération de déplacement, utilisez mv dans un terminal (les outils GUI sont lents car ils essaient de mettre à jour la vue périodiquement).

    S'il est dans la même partition, la commande ne changera que les pointeurs dans l'index du système de fichiers. Sinon, il s'agira d'une double opération (copie et suppression). Ce qui sera coûteux.

Il n'y a qu'un seul cas où je peux vous aider, si vous copiez ces fichiers plusieurs fois et qu'ils ne sont pas mis à jour. Comme je l'ai fait lorsque je partage ma collection avec des amis, chaque fois que j'essaie de copier, cela prend une décennie. (Ceci est plus utile pour les fichiers de petite taille uniquement).

  • Créez un seul paquet ou quelques paquets, comme un zip avec une compression faible ou nulle. Lorsque vous le copierez, il sera plus rapide, donc laissez DMA faire son travail.

3voto

Suriya Points 74

Si vous recherchez une solution qui vous donne les avantages des opérations en ligne de commande avec la sensation et la flexibilité de l'interface graphique combinées, je recommande mc ( commandant de minuit ).

mc commander 2-pane view

C'est un gestionnaire de fichiers visuel basé sur les ncurses - vous avez une vue à deux volets sur vos fichiers et un menu disponible. L'utilisation de la souris est possible, même par ssh. Vous pouvez naviguer dans votre fs, inspecter les fichiers avec la visionneuse de fichiers, filtrer selon des critères à la volée et faire effectuer les opérations de copie ou de déplacement en ligne de commande.

C'est un clone du programme DOS. Commandant Norton qui était populaire au milieu des années 80. Il fonctionne bien lorsque l'interface graphique commence à devenir peu fiable pour moi, et il est idéal pour votre objectif.

0voto

M Szil Points 21

J'ai rencontré des problèmes similaires - je testais ma configuration RAID et lors de transferts importants (par exemple 100 000+ fichiers et 1-2 TB de données en une seule fois), il semble que les transferts commencent assez rapidement - disons ~200MB/sec, puis ralentissent rapidement jusqu'à un plateau raisonnable ~90-120MB/sec (peut-être après avoir consommé un peu de mémoire cache flash sur les disques). Puis, après 20-30 minutes, l'opération commence à chuter progressivement jusqu'à un plateau beaucoup plus bas ~30-40MB/sec, ce qui est pire lorsqu'il s'agit de petits fichiers - faisant passer une opération de 4-5 heures à 15 heures.

J'ai passé un certain temps à essayer de diagnostiquer - par exemple, les défauts possibles de l'entraînement. Malgré l'essai de différents outils - ligne de commande, nautilus, je n'ai pas pu maintenir un débit décent pour les opérations de copie très importantes.

Ce qui fonctionnait le mieux pour moi était d'utiliser midnight commander, et quand la copie devenait lente, je mettais l'opération en pause jusqu'à ce que le voyant du disque dur s'éteigne après que toutes les opérations en attente aient été vidées - généralement une minute ou plus - puis je remettais MC en pause et cela reprenait un rythme décent pendant 20-30 minutes. Plutôt ennuyeux cependant.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X