Ich versuche, alle Dateien von dir1
, aufzulisten dir2
, dir3
und dir4
die sich möglicherweise irgendwo in meinem Unterverzeichnis befinden, wenn ich cwd
den find
Befehl verwende. Ich habe folgendes ohne Erfolg versucht:
find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'
Ich habe es auch versucht posix-extended
. Wie kann ich diese Dateien auflisten?
bash
find
regular-expression
Aaron
quelle
quelle
Antworten:
Und wenn Sie wollen drei Ordner mit dem Namen suchen
foo
,bar
undbaz
für alle*.py
Dateien, verwenden Sie diesen Befehl:find foo bar baz -name "*.py"
Also, wenn Sie Dateien von der
dir1
dir2
dir3
Verwendung anzeigen möchtenfind dir1 dir2 dir3 -type f
Versuche dies
find . \( -name "dir1" -o -name "dir2" \) -exec ls '{}' \;
quelle
./dir
anstelle vondir
./path/to/dir1
). In diesem Fall./dir1
würde es nicht existieren.Verwenden Sie am besten die -path-Direktive:
Das heißt: Finden Sie alle Dateien im aktuellen Verzeichnis, in denen sich "dir1" oder "dir2" oder "dir3" oder "dir4" im Pfad befindet.
quelle
-a
und-o
für das Standardäquivalent von GNU's-and
/-or
.Nur um es allen mitzuteilen. Das Hinzufügen
.*/
vor jedemdir
löste das Problem, da dasregex
mit dem vollen Pfad übereinstimmt, wie es scheint.quelle
Dies ist meine erste Idee, nachdem ich die vorherigen Antworten gelesen habe:
Dies berücksichtigt, dass der reguläre Ausdruck mit dem gesamten Dateinamen übereinstimmen muss und leichter zu verstehen ist.
quelle
Ein Beispiel für das schnelle (!) Auffinden bestimmter Dateien (access_log) an mehreren Speicherorten, die durch Platzhalter (Home-Verzeichnis) und allgemeines Apache2-Protokollverzeichnis definiert sind. Dabei wird auch eine Namensfilterung angewendet, um SSL-Protokolle und komprimierte alte Protokolle auszuschließen. Beantwortet die Frage hier nicht direkt, ist aber möglicherweise hilfreich für jemanden, der diese Anweisungen gefunden hat (wie ich).
Seien Sie vorsichtig mit Leerzeichen, besonders in der Nähe von
\(
und\)
.Ich habe es übrigens für apachetop verwendet, um die aktivsten Websites auf meinem Server zu finden.
quelle
Sie müssen nicht dir1 bis dir4 nach Namen angeben, wenn Sie regextype verwenden
type f
: finde Dateien nicht Verzeichnisseregextype sed
: benutzt sed regextyperegex
: Sucht mit Regex im gesamten Pfad".*/dir[1-4]/[a-z0-9]*"
:. * am Anfang bedeutet eine beliebige Anzahl von Zeichen, die vom Typ sein können (char / number / backslash (/) etc); dir [1-4] bedeutet suche nach "dir" gefolgt von einer Zahl zwischen 1 und 4; / [^ /] * gibt an, dass nach dir1-4 alle Pfadnamen weggelassen werden, die / enthalten, sodass nur Dateien im Verzeichnis dir1-dir4 zurückgegeben werden und alle Unterverzeichnisse ignoriert werden, die sich möglicherweise in dir1-dir4 befinden.hat ein Verzeichnis zum Testen erstellt: https://github.com/alphaCTzo7G/stackexchange/tree/master/linux/findSolution04092017
quelle
red
,green
,blue
undyellow
, oder sie könnten seinJohn
,Paul
,George
undRingo
.) Ihre Antwort geht davon aus, dass sie buchstäblichdir1
,dir2
,dir3
unddir4
. … (Fortsetzung)foo_bar
,foo.txt
undFOO
)? (4) Warum erklärt Ihr Text,/[^/]*
wenn Ihre Antwort ihn nicht verwendet?Ich weiß, dass Sie dies mit find angegeben haben, aber nur um andere Optionen anzuzeigen, die verwendet werden können, können Sie xargs verwenden:
Sie können eine Datei mit dem Namen "folders" haben, die Folgendes enthält:
Dann können Sie so etwas tun:
xargs meiner meinung nach fühle ich mich vielseitiger als find -exec. Sie können auch ein paar verrückte Sachen wie machen
quelle