2017-06-30 1 views
2

ich die folgenden Befehle versucht:Wie alle Dateien in einem Ordner w finden/o den Ordner selbst

>> ls abc 
1 2 3 
>> find abc -name "*" -print0 
abcabc/1abc/2abc/3 
>> find abc -name "*" -print0 | xargs -0 ls 
abc/1 abc/2 abc/3 

abc: 
1 2 3 

Es scheint, dass . auch finden, wenn ich * verwenden gefunden wird. Können wir fragen, ob wir nicht . zurückgeben?

Ich versuchte auch -not -path ".". Es funktioniert nicht.

+0

Wenn Sie nicht an Ordnern interessiert sind, sondern nur an Dateien, dann wäre 'find abc -type f' genau das, wonach Sie suchen ... – twalberg

Antwort

3

Sie können angeben, die minimale Tiefe relativ zum Ausgangspunkt (e) Sie an:

$ cd -- "$(mktemp --directory)" 
$ mkdir a 
$ touch a/b a/c 
$ find a -mindepth 1 -name "*" 
a/c 
a/b 
1

Sie können auch unter Verwendung der -type f primären auf diese Weise nur Dateien einschränken:

$ mkdir abc 
$ touch abc/{1..3} 
$ ls abc 
1 2 3 
$ find abc -type f 
abc/1 
abc/2 
abc/3 

Dann zeigt find nur Verzeichnisse als Teil der Anzeige von Dateipfaden:

$ mkdir abc/efg 
$ mkdir abc/xyz 
$ touch abc/efg/{4..6} 
$ find abc -type f 
abc/1 
abc/2 
abc/3 
abc/efg/4 
abc/efg/5 
abc/efg/6 

Letztes Beispiel wird weder . noch abc/xyz angezeigt.

+1

... oder'! -type d! Dies erlaubt die Verwendung von * symlinks *, * Geräten * oder * Pipes *, für Sample ... –

Verwandte Themen