So finden Sie eine Datei in einem beliebigen Verzeichnis

So finden Sie eine Datei in einem beliebigen Verzeichnis

Ich versuche, nach einer Datei namensBuch 1.

In meinem Test versuche ich, nach der oben genannten Datei zu suchen, und in diesem Test weiß ich nicht, wo sich diese Datei befindet.

Ich habe es versucht find / -iname book1, aber es gibt keine Ausgabe.

Wie finde ich meine Datei mit dem Namen „book1“ über die Befehlszeile, wenn ich nicht weiß, wo sich die Datei befindet?

BEARBEITEN:

Mein Szenario wird unten ausführlicher beschrieben:

  1. Die Dateierweiterung ist unbekannt
  2. Der genaue Name (also Großbuchstaben, Zahlen etc.) ist unbekannt
  3. Der Speicherort der Datei ist unbekannt

Antwort1

Erstens -inameist ein Argument für eine ShellMuster. Mehr über Muster erfahren Sie inBash-Handbuch. Der Kerngedanke ist, dass, um findtatsächlichfindenbook1Bei einer Datei muss der Dateiname dem angegebenen Muster entsprechen. Um eine Übereinstimmung zwischen Groß- und Kleinschreibung zu erreichen, Book1.gnumericmüssen Sie Folgendes hinzufügen, *sodass es wie folgt aussieht:

find / -iname 'book1*'

oder geben Sie den vollständigen Namen an:

find / -iname 'Book1.gnumeric'

Zweitens -inamewird make finddie Groß-/Kleinschreibung im Dateinamen ignorieren, wenn Sie es also angeben, könnte -iname book1es auch usw. finden. Wenn Sie sicher sind, dass die gesuchte Datei heißt, verwenden Sie nicht but , das ist schneller:Book1bOok1Book1.gnumeric-iname-name

find / -name 'Book1.gnumeric'

Drittens, denken Sie daran, das Muster zu zitieren, wie in derandere Antwort.

Und zuletzt - sind Sie sicher, dass Sie nach der Datei suchen möchten überallauf Ihrem System? Es ist möglich, dass die gesuchte Datei tatsächlich in Ihrem $HOMEVerzeichnis liegt, wenn Sie daran gearbeitet oder sie von irgendwoher heruntergeladen haben. Auch das kann viel schneller sein.

BEARBEITEN:

Mir ist aufgefallen, dass Sie Ihre Frage bearbeitet haben. Wenn Sie den vollständigen Dateinamen, die Groß- und Kleinschreibung und den Speicherort nicht kennen, sollten Sie etwas wie das Folgende verwenden:

find / -iname 'book1*'

Ich schlage außerdem vor, Folgendes 2>/dev/nullam Ende der Zeile einzufügen, um alle *permission denied*anderen Fehler auszublenden, die auftreten können, wenn Sie den Aufruf findals Nicht-Root-Benutzer durchführen:

find / -iname 'book1*' 2>/dev/null

Wenn Sie sicher sind, dass Sie nach einer einzelnen Datei suchen, und sich auf Ihrem System nur eine einzige Datei befindet, die den Kriterien entspricht, können Sie das Programm findnach dem Auffinden der ersten übereinstimmenden Datei beenden:

find / -iname 'book1*' -print -quit 2>/dev/null

Antwort2

Sie können den Befehl ausprobieren locate. Er verwendet eine Datenbank mit Dateinamen, um die Suche zu beschleunigen.

Um nach allen passenden Dateien zu suchen *book1*und dabei die Groß- und Kleinschreibung zu ignorieren, können Sie verwenden

locate -i book1

wenn Sie nach Dateien suchen möchtenbeginnendbei book1müssen Sie das Platzhalterzeichen selbst eingeben:

locate -i 'book1*'

Es ist viel schneller als find, ist aber nur so aktuell wie beim letzten Aktualisieren der Datenbank.

Antwort3

Wenn Sie wissen, dass Sie eine Datei mit dem Namen haben book1.something, bei der der Dateispeicherort, der genaue Wert von somethingund das Groß-/Kleinschreibungsmuster des Dateinamens unbekannt sind:

find / -iname 'book1.*'

Wenn Sie nur sicher wissen, dass der Dateiname das Wort enthält book, können Sie eine wahrscheinlich viel größere Liste generieren mit

find / -iname '*book*'

Das Argument -nameist ein Shell-Glob-Muster. Vergleichen Sie mit dem Verzeichnis, in dem sich die Datei befindet:

$ ls Book1
ls: cannot access 'Book1': No such file or directory
$ ls Book1.*
Book1.gnumeric

Dies stellt die Art der Suche dar, die von durchgeführt wird -name. Die -inameOption ermöglicht einfach eine Version ohne Berücksichtigung der Groß-/Kleinschreibung.

Antwort4

Mit Zsh können Sie Glob-Muster verwenden, daher funktioniert das auch:

ls -a /**/book1

Dadurch werden alle Speicherorte gefunden, an denen sich eine Datei mit dem Namen book1befindet.

In meinen Tests scheint dies schneller zu sein als die Verwendung von findund es erzeugt auch wenig bis gar keineFehler bei Benutzerberechtigungenbei Ausführung ohne Rootberechtigung

SehenHandbuch.

verwandte Informationen