web-dev-qa-db-fra.com

Déplacement d'une grande quantité de fichiers (~ 100 000)

Je travaille avec des dossiers qui contiennent beaucoup de fichiers, comme 100 000 voire 1 000 000 fichiers par dossier. Lorsque j'essaie de déplacer le contenu d'un dossier dans un autre, mon ordinateur reste toujours bloqué. Même lorsque le processus semble terminé, je ne peux voir le contenu d'aucun 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 de travailler avec ces chiffres?

Un moyen intelligent d'effectuer ce transfert de fichier?

13
Hyperion

Si vous envisagez de recourir à une méthode de ligne de commande pure pour transférer des fichiers de très grandes quantités, vous constaterez sans aucun doute que le processus est sensiblement plus rapide que d’utiliser une interface graphique.

Il existe de nombreuses façons d’y parvenir, mais les solutions suivantes ont fonctionné rapidement, de manière sûre et efficace sur mon système:

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

Quelques explications pour cette commande:

  1. Votre répertoire d'entrée est le '.' caractère et pour cette commande particulière, vous devez être dans ce répertoire
  2. Votre répertoire de sortie est le <destination> dans mon exemple. Évidemment, modifiez cela pour l'adapter à vos propres besoins et laissez de côté les crochets.
  3. Cette syntaxe autorise les noms de fichiers avec des espaces en bonus :)

Des permutations sans fin sont possibles mais cela devrait bien fonctionner et beaucoup plus efficacement que l'interface graphique. Une permutation par exemple: si vous vouliez déplacer uniquement des fichiers pdf, vous pourriez exécuter:

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

L'utilisation de xargsouvre de nombreuses possibilités, notamment avec le déplacement d'un aussi grand nombre de fichiers. Beaucoup, beaucoup de possibilités ....

Problèmes potentiels:

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

  1. Votre répertoire de destination est peut-être corrompu, inaccessible, mal orthographié, etc. mvy déplacera toujours les fichiers! Attention ici ...
  2. Si l'option -t (--target-directory) est manquante et que le dossier de destination est en fait un fichier, vous déplacerez un fichier et échouerez sur le reste. mva 2 utilisations: renommer source en destination ou déplacer la source en répertoire . Encore une fois soyez prudent ...
18
andrew.46

J'ai eu une expérience similaire auparavant, il est normal de traiter un grand nombre de fichiers. J'avais une grande collection de PDF fiches techniques (parties électroniques).

Les outils graphiques vérifient la présence de détails sur les fichiers et de métadonnées (icône/vignette, taille, ...). Même dans Icon View et sans vignettes, elles se figeront, car la plupart d'entre elles ne sont pas conçues pour des cas aussi extrêmes. L'outil graphique tente 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 d'écran actuelle. Le tri fait également partie du problème et ne permet en aucun cas de l'éviter.

  • Je finis par diviser des fichiers sur des dossiers distincts en fonction de la marque/du modèle (moins de 10 000 chacun) Peut-être pouvez-vous utiliser la date (comme le font la plupart des gens avec des photos/numérisations) ou la première lettre (comme dans référentiel de paquets Ubunt )
  • Il est plus facile d’utiliser les outils de la CLI, car ils ne montrent que ce que vous avez demandé. Vous pouvez utiliser locatepour une recherche rapide au lieu de findname__.
  • Pour une opération de déplacement, utilisez mvdans le terminal (les outils d’interface graphique sont lents car ils essaient de mettre à jour la vue périodiquement).

    Si elle se trouve dans la même partition, la commande ne modifiera que les pointeurs de l'index du système de fichiers. Si ce n'est pas le cas, l'opération sera double (copier et supprimer). Ce sera cher.

Je ne peux vous aider que dans un cas, si vous copiez ces fichiers plusieurs fois et qu'ils ne sont pas mis à jour. Comme je le faisais quand je partage ma collection avec des amis, chaque fois que j'essaie de copier, cela prend une décennie. (Ceci est plus utile avec des fichiers de petite taille uniquement)

  • Créez un seul package ou quelques packages, comme Zip sans compression/compression faible. Lorsque vous le copiez, il sera plus rapide, alors laissez DMA faire son travail.
4
user.dz

Si vous recherchez une solution qui vous donne les avantages des opérations en ligne de commande avec le sentiment graphique associé à la flexibilité, je vous recommande mc ( midnight commander ).

mc commander 2-pane view

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

C'est un clone du programme DOS Norton commander qui était populaire au milieu des années quatre-vingt. Cela fonctionne bien chaque fois que l'interface graphique commence à devenir peu fiable pour moi, et idéale pour vos besoins.

3
emk2203

J'ai rencontré des problèmes un peu similaires - je testais ma configuration RAID et lors de transferts énormes (par exemple plus de 100 000 fichiers et 1-2 TBde données en une fois), il semble que les transferts démarrent assez rapidement - laissons-nous dire environ 200 Mo/s, puis ralentissez rapidement pour atteindre un plateau raisonnable ~ 90 à 120 Mo/s (éventuellement après avoir consommé un peu de mémoire cache Flash sur les lecteurs). Ensuite, au bout de 20 à 30 minutes, l’opération commence à baisser progressivement vers un plateau beaucoup plus bas, environ 30 à 40 Mo/s, ce qui est encore pire lorsqu’il s’agit de fichiers de petite taille: une opération de 4 à 5 heures plus proche de 15 heures.

J'ai passé du temps à essayer de diagnostiquer - par exemple défauts d'entraînement possibles. Malgré différents outils - ligne de commande, nautile, je ne pouvais pas maintenir un débit décent pour les opérations de copie très volumineuses.

Ce qui a fonctionné le mieux pour moi a été d’utiliser le commandant de minuit, et chaque fois que la copie devenait lente, je mettais en pause l’opération jusqu’à ce que le voyant du disque dur s’éteigne une fois les opérations en attente terminées (généralement une minute environ), puis relâchait à nouveau MC et il reviendrait à un rythme décent pendant encore 20-30min. Plutôt ennuyeux cependant.

0
M Szil