
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:
- Die Dateierweiterung ist unbekannt
- Der genaue Name (also Großbuchstaben, Zahlen etc.) ist unbekannt
- Der Speicherort der Datei ist unbekannt
Antwort1
Erstens -iname
ist ein Argument für eine ShellMuster. Mehr über Muster erfahren Sie inBash-Handbuch. Der Kerngedanke ist, dass, um find
tatsächlichfindenbook1
Bei einer Datei muss der Dateiname dem angegebenen Muster entsprechen. Um eine Übereinstimmung zwischen Groß- und Kleinschreibung zu erreichen, Book1.gnumeric
mü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 -iname
wird make find
die Groß-/Kleinschreibung im Dateinamen ignorieren, wenn Sie es also angeben, könnte -iname book1
es auch usw. finden. Wenn Sie sicher sind, dass die gesuchte Datei heißt, verwenden Sie nicht but , das ist schneller:Book1
bOok1
Book1.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 $HOME
Verzeichnis 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/null
am Ende der Zeile einzufügen, um alle *permission denied*
anderen Fehler auszublenden, die auftreten können, wenn Sie den Aufruf find
als 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 find
nach 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 book1
mü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 something
und 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 -name
ist 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 -iname
Option 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 book1
befindet.
In meinen Tests scheint dies schneller zu sein als die Verwendung von find
und es erzeugt auch wenig bis gar keineFehler bei Benutzerberechtigungenbei Ausführung ohne Rootberechtigung
SehenHandbuch.