2014-07-09 24 views
30

Idealerweise würde ich in der Lage sein, ein Programm zu verwenden, wieWie kann ich eine Datei/ein Verzeichnis finden, die sich irgendwo in der Linux-Befehlszeile befinden könnte?

find [file or directory name] 

die Pfade mit dem passenden Dateinamen/Verzeichnissen zu melden. Leider scheint dies nur das aktuelle Verzeichnis und nicht den gesamten Ordner zu überprüfen.

Ich habe auch versucht zu lokalisieren und welche, aber keine finden die Datei, obwohl ich es auf dem Computer irgendwo weiß.

+0

nicht sicher, was das Problem ist, wie 'find -name„filename“' findet Dateien rekursiv in dem aktuellen Arbeitsverzeichnis suchen. – foips

+0

Es tut uns leid, wenn es nicht klar ist, die Datei möglicherweise nicht im aktuellen Arbeitsverzeichnis. Es könnte irgendwo auf dem Computer sein – johncorser

Antwort

38

"Leider scheint dies nur das aktuelle Verzeichnis, nicht den gesamten Ordner zu überprüfen". Vermutlich meinst du es sieht nicht in Unterverzeichnissen aus. Um dies zu beheben, verwenden Sie find -name "filename"

Wenn die betreffende Datei nicht im aktuellen Arbeitsverzeichnis ist, können Sie Ihre gesamte Maschine über

find/-name "filename" 

suchen Dies funktioniert auch mit Sachen wie find/-name "*.pdf", etc. Manchmal Ich mag zu Rohr, das auch (da auf meiner Maschine zumindest, es die Ergebnisse unterstreicht), so dass ich am Ende mit etwas wie

find/-name "*star*wars*" | grep star 

Doing dieser oder ein ähnliches Verfahren nur hilft mir sofort die in eine grep-Anweisung finden Dateiname und reco gnize, wenn es in der Tat die Datei ist, die ich suche.

+0

Danke. Wird das aus Neugierde für teilweise Dateinamen funktionieren? – johncorser

+2

Ja, vorausgesetzt, Sie verwenden das Sternchen. Beachten Sie, dass Groß- und Kleinschreibung beachtet werden muss. Wenn ich eine Datei namens STARTUP habe, die ich finden möchte, wird 'find/-name" * ART * "' es finden.Beachten Sie, dass 'find/-name" * art * "' diese Datei NICHT findet, da "art" klein geschrieben ist, während "STARTUP" groß ist –

+1

@johncorser Sie sollten auch in der Lage sein, eine Art von RE zu finden Was Sie brauchen –

4

Wenn die Notwendigkeit, in einigen dirs verschachtelt zu finden:

find/-type f -wholename "*dirname/filename" 

Oder verbunden dirs:

find/-type d -wholename "*foo/bar" 
2

Der find Befehl lange dauern wird, ist der schnellste Weg zur Datei suchen verwendet locate Befehl , die nach Dateinamen (und Pfad) in einer indizierten Datenbank sucht (aktualisiert mit dem Befehl updatedb).

Das Ergebnis erscheint sofort mit einem einfachen Befehl:

locate {file-name-or-path} 

Wenn der Befehl nicht gefunden wird, müssen Sie mlocate Paket installieren und updatedb Befehl ausführen zunächst die Suchdatenbank zum ersten Mal vorzubereiten.

Weitere Einzelheiten hier: http://itblog.study.land/the-fastest-way-to-find-files-by-filename-mlocate-locate-and-updatedb-commands-2/

0

Im Folgende Beispiel wird helfen, die bestimmte Ordner im aktuellen Verzeichnis zu finden. In diesem Beispiel wird nur Strom direkt suchen und es wird Unterverzeichnis im aktuellen Verzeichnis

#!/bin/bash 

result=$(ls -d operational) 

echo $result 

test="operational" 

if [ "$result" == "$test" ] 
then 
    echo "TRUE" 
else 
    echo "FALSE" 
fi