Ich möchte den Speicherort einer Datei über die Befehlszeile ermitteln. Ich habe versucht:
find . -type f -name "postgis-2.0.0"
und
locate postgis-2.0.0
umsonst. Wie lautet der Befehl zum Ermitteln des Verzeichnisses der Datei unter Angabe des Namens?
command-line
directory
find
Sam007
quelle
quelle
locate
befehl ist in ordnung, aktualisiere einfach zuerst den lokalisierten b mit befehlupdatedb
postgis-2.0.0
mehr vorhanden. In der Regel befinden sich die ausführbaren Dateien nach der Installation über Paketmanager in einem der$PATH
Ordner. Versuchen Siewhich postgis
, den Speicherort zu ermitteln. Wenn es nichts zurückgibt, sollten Sie nur manuell nach dem Speicherort der Datei suchen.Antworten:
Versuchen Sie es
find ~/ -type f -name "postgis-2.0.0"
stattdessen.Mit
.
wird nur das aktuelle Verzeichnis durchsucht.~/
durchsucht Ihr gesamtes Home-Verzeichnis (wahrscheinlich dort, wo Sie es heruntergeladen haben). Wenn Siewget
als root verwendet haben, ist es möglich, dass es sich um eine andere Stelle handelt, mit der Sie/
das gesamte Dateisystem durchsuchen können.Viel Glück
quelle
wget
als root verwendet, so/
funktioniert dankeIch würde versuchen:
Das . Wenn Sie nur im aktuellen Verzeichnis suchen, ist es am besten, alles von root aus zu durchsuchen, wenn Sie es wirklich nicht wissen. Außerdem bedeutet Typ -f, dass nach Dateien und nicht nach Ordnern gesucht wird. Durch Hinzufügen
sudo
kann in allen Ordnern / Unterordnern gesucht werden.Ihre Syntax für
locate
ist korrekt, aber Sie müssen möglicherweise ausführenzuerst. Aus welchem Grund auch immer, ich habe nie viel Glück damit
locate
.locate
Verwendet eine Datenbank mit Dateien und Verzeichnissen vonupdatedb
. Wenn Sie also eine neue Datei heruntergeladen haben, besteht eine höhere Wahrscheinlichkeit, dass Sieupdatedb
die Datenbank mit Dateien und Verzeichnissen nicht aktualisiert haben. Sie können verwenden,sudo updatedb
bevor Sie daslocate
Hilfsprogramm verwenden.updatedb
Läuft in der Regel einmal am Tag von selbst auf Linux-Systemen.quelle
find ist eines der nützlichsten Linux / Unix-Tools.
Versuchen
find . -type d | grep DIRNAME
quelle
Die anderen Antworten sind gut, aber ich finde, dass das Auslassen von
Permission denied
Aussagen mir klarere Antworten gibt ( Auslassungen,stderr
weil ich nicht laufesudo
):wo:
/
kann durch das Verzeichnis ersetzt werden, von dem aus Sie Ihre Suche starten möchtenf
kann durch ersetzt werden,d
wenn Sie nach einem Verzeichnis anstelle einer Datei suchen-iname
kann durch ersetzt werden,-name
wenn bei der Suche zwischen Groß- und Kleinschreibung unterschieden werden soll*
s im Suchbegriff kann weggelassen werden, wenn die Platzhalter in der Suche nicht verwendet werden sollenEine Alternative ist:
Auf diese Weise werden Ergebnisse zurückgegeben, wenn der Suchbegriff an einer beliebigen Stelle im gesamten Dateipfad übereinstimmt, z
/home/postgis-2.0.0/docs/Readme.txt
quelle
-regex
und-iregex
Schalter zum Suchen mitRegular Expressions
denen der Pfad auch Erwähnungen findet. Der Vorschlag, ein Element zu finden, bei dem es sich um eine Datei (-type f
) handelt,grep
ist ressourcenintensiver.Permission denied
Tritt auf, wenn der Benutzer keinen Zugriff auf Dateien oder Ordner hat. Wenn Sie "sudo
Vorher suchen" verwenden, kann "Suchen" alle Dateien anzeigen.-wholename
oder-iwholename
anstelle von Piping togrep
.Versuchen
find . -name "*file_name*"
Hier können Sie '.' (in das aktuelle Verzeichnis schauen) in '/' (in das gesamte System schauen) oder '~ /' (in das Home-Verzeichnis schauen) ändern.
Hier können Sie "-name" in "-iname" ändern, wenn Sie nicht zwischen Groß- und Kleinschreibung unterscheiden möchten.
Hier können Sie " Dateiname " (eine Datei, die mit jedem beliebigen Namen beginnen und enden kann) in den genauen Namen der Datei ändern .
quelle
Dies sollte das Auffinden der Datei vereinfachen:
Auf diese Weise erhalten Sie den vollständigen Pfad zur Datei
Baum listet den Inhalt von Verzeichnissen in einem baumartigen Format auf. Der
-f
Befehlsbaum gibt den vollständigen Pfad zur Datei an. Da wir keine Ahnung von seinem Speicherort oder übergeordneten Speicherort haben, empfiehlt es sich, vom Dateisystemstamm/
rekursiv nach unten zu suchen . Wir senden dann die Ausgabe an grep, um unser Wort hervorzuheben.postgis-2.0.0
quelle
Während der
find
Befehl die einfachste Möglichkeit ist, den Verzeichnisbaum rekursiv zu durchlaufen, gibt es andere Möglichkeiten, und insbesondere die beiden Skriptsprachen, die standardmäßig in Ubuntu enthalten sind, können dies bereits.Bash
bash
hat eine sehr schöneglobstar
Shell-Option, die das rekursive Durchlaufen des Verzeichnisbaums ermöglicht. Wir müssen nur testen, ob es sich bei dem Element in der./**/*
Erweiterung um eine Datei handelt und ob es den gewünschten Text enthält:Perl
Perl verfügt über das Suchmodul, mit dem der Verzeichnisbaum rekursiv durchsucht und über eine Unterroutine bestimmte Aktionen ausgeführt werden können. Mit einem kleinen Skript können Sie den Verzeichnisbaum durchlaufen, Dateien, die die gewünschte Zeichenfolge enthalten, in ein Array verschieben und dann wie folgt drucken:
Und so geht's:
Python
Python ist eine weitere Skriptsprache, die in der Ubuntu-Welt sehr verbreitet ist. Insbesondere verfügt es über ein
os.walk()
Modul, mit dem wir die gleiche Aktion wie oben ausführen können - Verzeichnisbaum durchlaufen und eine Liste der Dateien abrufen, die die gewünschte Zeichenfolge enthalten.Als Einzeiler kann dies folgendermaßen erfolgen:
Das vollständige Skript würde folgendermaßen aussehen:
quelle
$ find . -type f | grep IMG_20171225_*
Gibt
./03-05--2018/IMG_20171225_200513.jpg
das DOT nach dem Befehl
find
an, einen Startpunkt anzugeben,also den aktuellen Ordner, der
durch den Namensfilter "geleitet" (= gefiltert) wird
IMG_20171225_*
quelle