Ich habe den Befehl find verwendet, um Dateien auf meiner 1-TB-Festplatte zu finden. es dauert sehr lange. dann habe ich locate verwendet, was sich bei regelmäßiger Aktualisierung mit updateedb als schneller erwiesen hat. Die Einschränkung beim Suchen besteht jedoch darin, dass ich keine Dateien mit einer bestimmten Größe oder einer bestimmten Änderungs- / Erstellungszeit finden kann. Können Sie mir Ideen vorschlagen, wie Sie Dateien schneller finden oder in diesem Fall die Ausgabe des Befehls "locate" so weiterleiten können, dass alle anderen Informationen wie Größe, Zeit usw. angezeigt oder in eine Datei umgeleitet werden können?
8
find
Befehl geben, einschließlich der Argumente, die zu lange dauern? Oderfind
ist langsam mit irgendwelchen Argumenten für Sie? Auf meinem System scannt find das gesamte Dateisystem innerhalb von 2 Sekunden (100 GB).find
dauert einige Minuten, bis ich auf meinem Medien- und Image-Home-Server bin .root@viashivan:/media/data1# find . -type f | wc -l
und das Ergebnis ist 2044791.Antworten:
Ich habe keine Antwort gesehen, die den Wünschen von Chaitanya nahe kommt. Wenn Sie nach Dateinamen suchen möchten, kann eine Kombination aus Suchen, Suchen, ls und grep ausreichend sein. Aber ich denke, Chaitanya möchte zum Beispiel nach "allen Dateien suchen, die vor 2011 erstellt wurden". Dies kann perfekt mit find gemacht werden, aber ich kann mir vorstellen, dass das Durchsuchen von 1 TB lange dauern wird (hängt mehr von der Anzahl der Dateien ab, nicht unbedingt von der Gesamtgröße). Um dies zu beschleunigen, halte ich eine Indizierung für unvermeidlich. Das Problem beim Suchen (Indizieren mit updateb) besteht darin, dass die Erstellungszeit nicht indiziert wird.
Was Chaitanya also braucht, ist etwas, das die benötigten Attribute von Dateien indiziert (Dateiname, Dateigröße, Erstellungsdatum, mehr?). Und später etwas, das nach diesen Attributen suchen kann. Soweit ich weiß, gibt es dafür unter Ubuntu keine sofort einsatzbereite Lösung.
Ein wichtiger Kommentar von Chaitanya: "Jetzt ist die Sache, dass ich eine PHP-basierte Web-GUI entwerfe ...". Da Ihr Problem sehr spezifisch klingt, möchten Sie vielleicht selbst etwas aufbauen. Einige Vorschläge:
Indizieren Sie die Dateien in einer Datenbank (mit Cronjob) und verwenden Sie SQL zur Suche.
Verwenden Sie Lucene zum Indizieren und Suchen ( Zend Lucene für PHP)
quelle
Sie können Tracker ausprobieren . Es verfügt über einen Daemon, der auf Dateiänderungen wartet und eine Datenbank mit allen Metadaten wie möglich aktualisiert, sowie einen Client, mit dem Sie nach Dateien suchen können. Beachten Sie, dass nur das Benutzerverzeichnis indiziert wird, nicht die gesamte Festplatte.
Das Hauptproblem ist, dass für die Indizierung CPU-Zeit benötigt wird. Verwenden Sie diese Funktion daher nur, wenn Ihr Computer über ausreichend Strom verfügt.
Sie müssen sowohl den Server als auch den Client installieren. Sie heißen tracker und tracker-gui. Wenn Sie im Software Center nach einem Tracker suchen, sind dies die beiden ersten Übereinstimmungen. Wenn Sie sie lieber über die Befehlszeile installieren möchten:
quelle
Antwort auf Kommentar:
ls -la "$(locate -d external.db "Duel of Fates (Darth ")"
produziert:
Danke @Oli im AskUbuntu-Chat, dass du mich auf "etwas" hingewiesen hast, um Shell-Fluchten zu umgehen
quelle
Das Problem bei der Suche ist, dass nur gelegentlich Dateiinformationen nach einem regulären Cron-Zeitplan erfasst werden. Wenn Sie mlocate benötigen, um die Informationen zu aktualisieren, führen Sie dies einfach aus
Wenn Sie eine Lösung benötigen, die mehr "in Echtzeit" ist und ständig aktualisiert wird, würde ich empfehlen, etwas zu verwenden, das speziell für die Überwachung Ihres Dateisystems entwickelt wurde, wie
tracker-gui
Javier Rivera sagte.Um die Ausgabe von
locate
in eine Datei umzuleiten , verwenden Sie einfach einen Pfeil>
anstelle des Pipe-|
Zeichens. (Ein Pfeil überschreibt eine Ausgabedatei, wenn sie bereits vorhanden ist. Zwei Pfeile werden an eine Ausgabedatei angehängt, falls sie bereits vorhanden ist.)quelle
Verwenden Sie "find option Parameter". Siehe "Mann finden" mehr Details. Verwendung findet , ein Dokument schnell und einfach zu finden, zum Beispiel. "find * .jpg"
quelle
Verwenden Sie das Gnome-Suchwerkzeug
Es bietet
quelle
In dieser Antwort wurde viel Zeit und Mühe aufgewendet, um dieses Problem zu lösen:
Dieser Code kann auf Ihre
locate
Bedürfnisse verkleinert werden :Zusammenbruch
locate -0 *.mp4 | xargs -0 ls -s
:locate -0
- Der Befehl find druckt normalerweise eine neue Zeile (\n
) am Ende jedes Eintrags.0
weist Lokalisieren an, Einträge stattdessen mit einem Null-Byte zu trennen.*.mp4
Suchen Sie alle Dateien, die auf .mp4 enden (Audiodateien).|
ist das Pipe-Zeichen. Was auch immer mit dem Befehl "Lokalisieren" gedruckt wird, wird nicht auf dem Bildschirm angezeigt, sondern zum nächsten Befehl umgeleitet.xargs -0
- Der Befehl xargs nimmt die Eingabe für Eingabe vom vorherigen Befehl (Suchen) entgegen und übergibt sie an den nächsten Befehl.-0
bedeutet, dass Einträge durch ein Null-Byte und nicht durch ein newline (\n
) -Trennzeichen getrennt sind.ls -s
Derls
Befehl wird von aufgerufenxargs
und der Dateiname an list übergeben. Das-s
Flag gibtls
an, dass die Dateigröße angegeben werden soll.Wie Sie sehen, dauert der Vorgang für mehr als eine Million Dateien in drei Ubuntus- und zwei Windows-Partitionen weniger als 1 Sekunde.
quelle