Durchsuchen von Ordnern mit mehr als 100000 Bildern

8

Ich habe einen Ordner mit 322000 Bildern. Wenn ich mit einem Dateimanager in diesen Ordner gehe, bleibt er beim Laden hängen.

Wie kann ich dorthin gehen und Bilder anzeigen oder löschen?

user22005
quelle
Könnten Sie ein Feedback zu den Antworten geben, die Sie versucht haben, hat es (oder einige) für Sie funktioniert?
Jacob Vlijm
Na sicher. Ich liebe dieses Forum, es ist voller Profis.
user22005
Alle Miniaturansichten für diesen Ordner vorgenerieren? Verwenden Sie dazu askubuntu.com/a/201997/350004 .
SolsTiCe

Antworten:

5

Teilen Sie Ihre Dateien automatisch in ein (rekursives) Verzeichnis mit einer beliebigen Anzahl von Dateien pro (Unter-) Ordner / Ordner pro übergeordnetem Ordner

Der einfachste und meiner Meinung nach effizienteste Weg besteht darin, die Dateien in Ordnern in Ordnern neu zu organisieren, ggf. sogar in verschiedenen Ebenen von Verzeichnisebenen. Dadurch können Ihre Dateien durchsucht werden, ohne dass Nautilus erstickt.

Das folgende Skript erledigt das für Sie. Es werden Ordner mit einer beliebigen Anzahl von Dateien erstellt. Diese Ordner werden in Unterordnern organisiert, wenn sie eine (gleiche) beliebige Anzahl usw. überschreiten. Mit anderen Worten; Jede (Unter-) Ebene hat die gleiche maximale Anzahl von Dateien / Unterverzeichnissen, was das Durchsuchen erleichtert.

Jeder der erstellten Ordner zeigt die Ordnernummer + die Anzahl der erstellten Unterebenen (wobei z. B. 22_1 nur Dateien enthält):

Geben Sie hier die Bildbeschreibung ein

Die Prüfung

Ich habe in einem Verzeichnis von 300.000 Dateien getestet, um es in Blöcken von (maximal) 100 Dateien zu reorganisieren, in übergeordneten Verzeichnissen mit (maximal) 100 Ordnern usw. zu organisieren.
Auf meinem System dauerte es weniger als eine Minute. Ein Test von 100.000 Dateien in kleinere Blöcke war eine Frage von Sekunden.

Das Skript

#!/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

Wie benutzt man

  1. Kopieren Sie das Skript in einen leeren Ordner und speichern Sie es unter reorganize.py
  2. Legen Sie im Kopfabschnitt den Pfad zu Ihrem Verzeichnis fest, die gewünschte Anzahl von Dateien pro Unterverzeichnis (= entspricht den Ordnern pro enthaltenem Verzeichnis).
  3. Führen Sie es mit dem folgenden Befehl aus:

    python3 /path/to/reorganize.py
    

Hinweis

Das Skript (so wie es ist) erstellt lediglich eine Verzeichnisstruktur, in der jede Ebene eine definierte Anzahl von Dateien / Ordnern hat. Es wird keine Organisation nach Name, Datum oder was auch immer berücksichtigt.


BEARBEITEN

Wie in einem Kommentar angefordert, ein Skript zum Verschieben der Dateien in ein flaches Verzeichnis, nachdem die Dateien verarbeitet wurden.
Die Verwendung ist ziemlich gleich. Stellen Sie als Verzeichnis dasselbe Verzeichnis wie das erste Skript ein, aber das scheint offensichtlich.

#!/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)

Hinweis

Wie in einem Kommentar erwähnt, geht das Skript davon aus, dass kein Risiko für Namenskonflikte besteht, da alle Dateien ursprünglich aus demselben (flachen) Verzeichnis stammten.

Jacob Vlijm
quelle
Das hat genau so funktioniert, wie du es gesagt hast und es ist großartig. Danke mein Herr.
user22005
Gibt es eine Möglichkeit, alle diese Dateien in einen Ordner zu verschieben?
user22005
@ user22005 meinst du zurück in einen Ordner? Ich verstehe, dass sie dort herkommen, aber absolut. Benötigen Sie ein zusätzliches Skript? Erwähne es einfach :).
Jacob Vlijm
genau. Ich brauche ein Skript, um all diese Dateien wieder dorthin zu verschieben, wo sie waren.
user22005
@ user22005 um sicherzugehen: War das Verzeichnis anfangs "flach" (keine Unterverzeichnisse)?
Jacob Vlijm
4

Dies ist ein Problem im Dateimanager, nautiluswenn mit Verzeichnissen gearbeitet wird, die eine große Anzahl von Dateien enthalten. Dies wird in diesem Fehler beschrieben .

Ich rate Ihnen in diesem Fall, einen schnellen Dateimanager zu verwenden. Sie können gnome-commanderes 5- bis 6-mal schneller als Nautilus verwenden, und dieses Verhältnis wird größer, wenn Sie mit einer großen Anzahl von Dateien arbeiten. Es ist nicht so hübsch GUI, aber es sollte Ihnen helfen, Ihr Problem zu beheben.

So installieren Sie es:

sudo apt-get install gnome-commander

Öffnen Sie nun das Verzeichnis mit einer großen Anzahl von Dateien:

gnome-commander /path-to-dir
Maythux
quelle
Dies gab mir keine Miniaturansicht, die ich zum Anzeigen und Löschen von Bildern benötigte.
user22005
1

Ich habe keine persönlichen Erfahrungen mit so großen Bibliotheken, aber ich habe gut über Delfine gehört.

Dolphin ist der Dateimanager, der in KDE-Distributionen wie Kubuntu verwendet wird. Sie können es auf dem Ubuntu-Desktop installieren und problemlos ausführen, obwohl der Platzbedarf möglicherweise sehr groß ist, da viele KDE-Abhängigkeiten heruntergeladen und installiert werden müssen.

Laden Sie den Dolphin File Manager herunter

Ein anderer Ansatz könnte darin bestehen, einen Fotomanager zu verwenden. Ich würde davon ausgehen, dass solche Tools für die Anzeige großer Sammlungen optimiert sind.

Für Fotomanager gibt es einige Alternativen, aber einige beliebte sind:

Shotwell , Digikam und F-Spot

Steffen Christensen
quelle
1

Ich habe den Thunar-Dateimanager mit Bildern in der Größenordnung von 10.000 ausprobiert. Zeigt Miniaturansichten auf lokalen Laufwerken ziemlich schnell an und öffnet auch Netzwerklaufwerke, jedoch viel langsamer. Ich habe es jedoch nicht für eine größere Anzahl von Dateien versucht. Aber zumindest macht es einen viel besseren Job als Nautilus, ohne die grafische Oberfläche zu beeinträchtigen

sudo apt-get install thunar

Es gibt auch ein Skript, mit dem Sie es zu Ihrem Standard-Dateimanager machen können (wenn es Ihnen gefällt). Das Skript finden Sie hier:

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

Hazem
quelle
0

Sie können über das Terminal zu diesem Ordner gehen, do gnome-open image.jpgoder xdg-open image.jpg, der eines der Bilder mit gnome-image-vieweroder besser bekannt als eye of gnome(eog) öffnen soll. Wenn Sie als Nächstes F9auf Ansicht -> Bildergalerie klicken oder gehen, können Sie eine Vorschau der Miniaturansichten anzeigen.

Sergiy Kolodyazhnyy
quelle