Mein Ziel ist es, alle PDF-Dateien auf einem Remote-Computer zu finden, daher greife ich auf den nützlichen Befehl zurück find
. Also tippe ich
find ~ * .pdfoder
find ~ "* .pdf"und ich bekomme nichts. Ich mache das gleiche auf meiner Maschine und bekomme nichts. Ich suche regelmäßig über das Menü auf meinem Computer und finde einige PDF-Dateien. Würde mir bitte jemand sagen, was ich falsch mache?
find
ist alles andere als nutzlos.find
es intuitiv ist. Ich könnte das wahrscheinlich auch in einem schöneren Ton sagen; manchmal reagiere ich auf (dumme) negative Kommentare.Antworten:
find
ist alles andere als nutzlos. Sie verwenden es einfach nicht richtig.Versuchen:
find . -type f -iname '*.pdf'
quelle
Schauen Sie sich die Dokumentation für die Findutils an . Der
find
Befehl ist unglaublich mächtig und hat folglich eine etwas komplizierte Oberfläche. Sie können tun, was Sie wollen mit:Der obige Befehl bedeutet "innerhalb von finden. Für Einträge vom Typ Datei mit einem Namen ohne Berücksichtigung der Groß- / Kleinschreibung, der mit * .pdf übereinstimmt (und den Namen solcher Übereinstimmungen drucken)". Der Befehl find kann tatsächlich verwendet werden, um Befehle für die gefundenen Dateien auszuführen (anstelle oder zusätzlich zum Drucken der Dateinamen). Für Ihre Zwecke sind Sie jedoch möglicherweise mit dem Befehl " locate" besser vertraut. Dies setzt das Auffinden von Dateien sehr einfach, vorausgesetzt, Sie haben die Lokalisierungsdatenbank mit updateedb erstellt . Zum Beispiel:
Sie werden auch feststellen, dass der Befehl find normalerweise schneller ist als der Befehl find, da locate einen Index von Dateinamen (die Lokalisierungsdatenbank) verwendet, während find die Hierarchie für jeden Aufruf durchläuft.
quelle
Sie vermissen einfach das Prädikat, das sagt, wonach Sie suchen (z
-name
. B. )So finden Sie im Home-Verzeichnis nach Namen:
Beachten Sie, dass der Platzhalter maskiert werden
*
muss, damit die Shell ihn nicht interpretiert, bevor find ihn in die Hände bekommt. Die Verwendung von'*.pdf'
und"*.pdf"
hat den gleichen Effekt wie\*.pdf
.So unterscheiden Sie zwischen Groß- und Kleinschreibung:
Um die Ergebnisse nur auf Dateien zu bereinigen (der Namensausdruck wird dies wahrscheinlich für Sie erledigen, aber nur für den Fall, dass Sie Verzeichnisse mit seltsamen Namen haben):
Um sicherzustellen, dass find folgenden symbolischen Links folgt (ich möchte dies normalerweise selbst tun, wenn ich suche):
So tun Sie etwas mit den gefundenen Dateien: Sie können diese mithilfe der Standardumleitung (z. B. am
> filename
Ende anheften ) in eine Datei kopieren oder die-exec
Option zum Ausführen eines Befehls verwenden (Einzelheiten finden Sie in der Manpage). Letzterer führt jedoch jeweils einen Befehl für jede Datei aus. Es ist oft schneller, denxargs
Befehl Ihre gefundenen Dateien als Argumente an einen anderen Befehl übergeben zu lassen, alles auf einmal oder große Teile gleichzeitig. Zum Beispiel für Ad-hoc-Greps (aber nicht indizierte) Greps durch Header-Dateien:Und eine letzte Erweiterung, damit dieser letzte Befehl ordnungsgemäß funktioniert, wenn Sie Dateien und Verzeichnisse mit Leerzeichen haben:
quelle
Schauen Sie sich dieses Tutorial an
Ich denke, was Sie tun wollen, ist
quelle
iname
Attribut für eine bessere Sicht auf den Flur verwendenIch habe den Fund mit grep like kombiniert
finden . . | grep -i ".pdf"
Vielleicht ist es nicht besonders effizient, aber es macht den Job gut.
quelle
find
direkt erfolgen, wenn Sie dies wünschen-iregex
:find ~ -iregex '.*\.pdf'
. Das Problem ist, dassfind
das Muster so behandelt wird, als hätte es immer ein^
vorderes und ein$
hinteres Muster, sodass Ihr Muster etwas komplizierter sein muss. Beachten Sie auch:.
In Ihrem Muster handelt es sich tatsächlich um einen Platzhalter mit einem Zeichen, nicht um einen wörtlichen Punkt.Suchen Sie nach Dateien, die Sie in den letzten x Tagen heruntergeladen haben
Sie finden PDF-Dateien in Ihrem Home-
~
Verzeichnis und darunter mit Erweiterung,.pdf
unabhängig von Groß- und Kleinschreibung (das ist ich ininame
) und bis zu 1 Tag geändert, weil ich hinzugefügt habemtime -1
; Wenn Sie -60 in mtime eingeben, sind es die letzten 60 Tage.quelle
Um eine Suche innerhalb der "gefundenen" Dateien auszuführen, gibt es diese Konstruktion:
Der Befehl exec muss mit dem Escapezeichen ";" enden. und das -H wird benötigt, damit grep den Dateipfad zusätzlich zu der Zeile in der Datei ausdrucken kann, in der sich "string" befindet.
quelle