Parcourir les dossiers avec plus de 100 000 images

8

J'ai un dossier contenant 322000 images. Lorsque je vais dans ce dossier avec n'importe quel gestionnaire de fichiers, il se bloque lors du chargement.

Comment puis-je m'y rendre et voir ou supprimer des images?

user22005
la source
Pourriez-vous donner des commentaires sur la ou les réponses que vous avez essayées, est-ce que cela a fonctionné (ou certaines) pour vous?
Jacob Vlijm
bien sûr. J'adore ce forum, il est rempli de professionnels.
user22005
Prégénérer toutes les vignettes de ce dossier? Utilisez askubuntu.com/a/201997/350004 pour cela.
solsTiCe

Réponses:

5

Divisez automatiquement vos fichiers dans un répertoire (récursif) avec un nombre arbitraire de fichiers par (sous) dossier / dossiers par dossier supérieur

Le moyen le plus simple et le plus efficace à mon humble avis est de demander à un script de réorganiser les fichiers en dossiers, si nécessaire, même en différentes couches de niveaux de répertoire. Cela rendra vos fichiers navigables sans étouffer nautilus.

Le script ci-dessous le fera pour vous. Il créera des dossiers avec un nombre arbitraire de fichiers. Ces dossiers seront organisés en sous-dossiers s'ils dépassent un (le même) nombre arbitraire, etc. En d'autres termes; chaque (sous-) niveau aura le même nombre maximal de fichiers / sous-répertoires, ce qui rend la navigation facilement possible.

Chacun des dossiers créés affiche le numéro de dossier + le nombre de sous-niveaux créés (où par exemple 22_1 ne contient que des fichiers):

entrez la description de l'image ici

Le test

J'ai testé dans un répertoire de 300 000 fichiers, à réorganiser en morceaux de (max) 100 fichiers, à organiser en répertoires supérieurs de (max) 100 dossiers, etc.
Cela a pris moins d'une minute sur mon système. Un test de 100 000 fichiers en plus petits morceaux était une question de secondes.

Le scénario

#!/usr/bin/env python3
import subprocess
import os
import shutil

#--- set the directory to reorganize below
dr = "/path/to/directory"
#--- set the number of files/folders per level
size = 100

level = 0
def move(fn, drn, level):
    folder = dr+"/"+str(drn)+"_"+str(level)
    if not os.path.exists(folder):
        os.mkdir(folder)
    shutil.move(dr+"/"+f, folder+"/"+f)

while len(os.listdir(dr)) > size:
    level += 1
    fn = 0; drn = 1
    for f in os.listdir(dr):
        if fn < size:
            move(fn, drn, level)
        else:
            fn = 0
            drn += 1
            move(fn, drn, level)
        fn += 1

Comment utiliser

  1. Copiez le script dans un dossier vide, enregistrez-le sous reorganize.py
  2. Dans la section head, définissez le chemin d'accès à votre répertoire, le nombre souhaité de fichiers par sous-répertoire (= égal aux dossiers par répertoire contenant).
  3. Exécutez-le par la commande:

    python3 /path/to/reorganize.py
    

Remarque

Le script (tel qu'il est) crée simplement une structure de répertoires dans laquelle chaque niveau a un nombre défini de fichiers / dossiers. Il ne prend en compte aucun type d'organisation par nom, date ou autre.


ÉDITER

Comme demandé dans un commentaire, un script pour déplacer les fichiers dans un répertoire plat après avoir traité les fichiers.
L'utilisation est à peu près la même. En tant que répertoire, définissez le même répertoire que le premier script, mais cela semble évident.

#!/usr/bin/env python3
import shutil
import os

#--- set the directory, the same as the first script
dr = "/path/to/directory"
#---

# move the files back
for root, dirs, files in os.walk(dr):
    for file in files:
        shutil.move(root+"/"+file, dr+"/"+file)
# remove the (now empty) subdirectories
for d in os.listdir(dr):
    folder = dr+"/"+d
    if os.path.isdir(folder):
        shutil.rmtree(folder)

Remarque

Comme mentionné dans un commentaire, le script suppose qu'il n'y a pas de risque de conflits de noms, car tous les fichiers provenaient initialement du même répertoire (plat).

Jacob Vlijm
la source
Cela a fonctionné exactement comme vous l'avez dit et c'est génial. Merci Monsieur.
user22005
existe-t-il un moyen de déplacer tous ces fichiers dans un dossier?
user22005
@ user22005 vous voulez dire de nouveau dans un dossier? Je comprends que c'est d'où ils viennent?, Mais oui absolument. Avez-vous besoin d'un script supplémentaire? Il suffit de le mentionner :).
Jacob Vlijm
exactement. J'ai besoin d'un script pour replacer tous ces fichiers là où ils étaient.
user22005
@ user22005 pour vous assurer: le répertoire était-il initialement "plat" (pas de sous-répertoires)?
Jacob Vlijm
4

Il s'agit d'un problème dans le gestionnaire de fichiers nautiluslorsque vous travaillez avec des répertoires contenant un grand nombre de fichiers, cela est décrit dans ce bogue .

Je vous conseille dans ce cas d'utiliser un gestionnaire de fichiers rapide. vous pouvez l'utiliser gnome-commanderc'est 5X à 6X fois plus vite que nautilus et ce rapport devient plus grand lorsqu'il s'agit d'un grand nombre de fichiers. Ce n'est pas une jolie interface graphique, mais cela devrait vous aider à résoudre votre problème.

Pour l'installer:

sudo apt-get install gnome-commander

Ouvrez maintenant le répertoire avec un grand nombre de fichiers:

gnome-commander /path-to-dir
Maythux
la source
Cela ne m'a pas donné la vue miniature dont j'avais besoin pour visualiser et supprimer des images.
user22005
1

Je n'ai aucune expérience personnelle avec des bibliothèques aussi grandes, mais j'ai bien entendu parler de dauphin.

Dolphin est le gestionnaire de fichiers utilisé dans les distributions KDE telles que Kubuntu. Vous pouvez l'installer et l'exécuter très bien sur le bureau Ubuntu, bien que l'empreinte puisse être assez grande, car il doit télécharger et installer de nombreuses dépendances de KDE.

Télécharger Dolphin File Manager

Une autre approche pourrait être d'utiliser un photomanager. Je suppose que ces outils seraient optimisés pour afficher de grandes collections.

Pour les gestionnaires de photos, il existe de nombreuses alternatives, mais quelques-unes sont populaires:

Shotwell , Digikam et F-Spot

Steffen Christensen
la source
1

J'ai essayé le gestionnaire de fichiers Thunar avec des images de l'ordre de 10 000. Affiche les vignettes assez rapidement sur les disques locaux et ouvre également les disques réseau mais beaucoup plus lentement. Je ne l'ai cependant pas essayé pour un plus grand nombre de fichiers. Mais au moins, il fait un bien meilleur travail que Nautilus sans compromettre l'interface graphique

sudo apt-get install thunar

Il existe également un script pour en faire votre gestionnaire de fichiers par défaut (si vous l'aimez). Vous pouvez trouver le script ici:

https://help.ubuntu.com/community/DefaultFileManager

Hazem
la source
0

Vous pouvez passer par le terminal dans ce dossier, faire gnome-open image.jpgou xdg-open image.jpg, ce qui devrait ouvrir l'une des images avec gnome-image-viewerou plus communément appelée eye of gnome(eog). Ensuite, si vous appuyez sur F9ou accédez à Affichage -> Galerie d'images, vous pouvez prévisualiser les vignettes.

Sergiy Kolodyazhnyy
la source