Listet alle Dateien / Verzeichnisse im oder unter dem aktuellen Verzeichnis auf, die mit "Dateiname" übereinstimmen.
Das direkte Äquivalent ist
find . -iname <filename>
Hier werden alle <filename>
im aktuellen Verzeichnis und in allen Unterverzeichnissen aufgerufenen Dateien und Verzeichnisse aufgelistet, wobei Groß- und Kleinschreibung ignoriert wird.
Wenn Ihre Version von find nicht unterstützt wird -iname
, können Sie -name
stattdessen verwenden. Beachten Sie, dass im Gegensatz zu -iname
, -name
Groß- und Kleinschreibung.
Wenn Sie nur die aufgerufenen Dateien <filename>
und nicht die Verzeichnisse auflisten möchten , fügen Sie hinzu-type f
find . -iname <filename> -type f
Wenn Sie Platzhalter verwenden möchten, müssen Sie diese in Anführungszeichen setzen, z
find . -iname "*.txt" -type f
Andernfalls wird die Shell sie erweitern.
Wie andere bereits betont haben, können Sie auch Folgendes tun:
find . | grep "\.txt$"
grep
druckt Zeilen basierend auf regulären Ausdrücken, die leistungsfähiger als Platzhalter sind, aber eine andere Syntax haben.
Siehe man find
und man grep
für weitere Details.
<filename>
Platzhalter enthalten sind, setzen Sie sie in Anführungszeichen, zfind . -name '*.txt'
.<filename>
als Markierung für die Benutzereingabe ist in Befehlszeilenumgebungen, in denen die< and >
meiste Zeit eine bestimmte Bedeutung hat, eine schlechte Angewohnheit . Ich schlage vor, nurfilename
FILENAME zu verwenden, um es hervorzuheben. Die meisten Menschen werden verstehen, und diejenigen, die dies nicht tun, können Schaden anrichten, wenn sie nicht verstehen, dass sie nicht das Zeichen kleiner oder größer als treffen sollen.<filename>
Es ist eine Konvention in vielen UNIX-Dokumentationen, daher denke ich, dass es nützlich ist, dass sich die Leute darüber im Klaren sind, aber ich stimme zu, dass esFILENAME
möglicherweise einfacher ist, sie zu verstehen.find -iname <filename>
ist besser, da die Groß- und Kleinschreibung nicht berücksichtigt wird wie bei DOSEinige Muscheln erlauben
ls **/filename
, was sehr praktisch ist.quelle
shopt -s globstar; echo **/filename
äquivalent zufind . -name "filename"
. Es funktioniert auch in zsh.shopt -s globstar
, wird es wahrscheinlich für dich funktionieren. Rekursives Globbing ist eine Funktion, die nur in einigen Shells verfügbar ist und manchmal nicht standardmäßig aktiviert ist.shopt
Befehl aktiviert die Optionglobstar on
. Jetzt funktioniert es wie ein Zauber. Danke vielmals.Sie können dies mit tun
quelle
find . -regextype posix-egrep -regex '.*filename.*'
(Ich weiß nicht, ob deregrep
Teil wichtig ist, aber Sie habenegrep
in Ihrer Antwort verwendet, also habe ich es eingeschlossen)grep
verwendet reguläre Ausdrücke, während der DOS-Befehl Shell-Platzhalter verwendet.find . -name "*.*"
wird nicht tun, was Sie von einem DOS-Hintergrund erwarten würden. Globs sind nah genug, um erkennbar zu sein, während Regexes ein völlig neues Biest sind.*.*.*
man in einem modernen DOS zB Windows Cmd? Was ist*.*.*.*
?Es kann auch sein:
tree -if </your/path>
oder'pwd'
als Pfadquelle