2010-02-01 7 views
10

Bei Verwendung des find Befehl, warum es ist, dass die folgenden erfolgreich versteckt Verzeichnisse ignorieren (die mit einem Punkt beginnen), während alles passend anderes:Ignorieren/Prune versteckte Verzeichnisse mit GNU finden Befehl

find . -not \(-type d -name ".?*" -prune \)

aber das wird nicht alles überhaupt entsprechen:

find . -not \(-type d -name ".*" -prune \)

der einzige Unterschied ist das Fragezeichen. Sollte das letztgenannte Kommando ebenfalls Verzeichnisse nicht erkennen und ausschließen, die mit einer Periode beginnen?

+0

gehört auf superuser.com – t0mm13b

+3

@tommie - geht das? hängt davon ab, ob es interaktiv oder als Teil eines Skripts verwendet wird; im letzteren Fall ist es wohl eine legitime Frage der Softwareentwicklung. –

+0

wegen Irrelevanz der Titelwähnung von "GNU find" in ausgewählter Antwort abgelehnt. – danorton

Antwort

8

Dieser Befehl Pflaumen alles, weil es . beschneidet - diese versuchen, den Unterschied zu sehen:

$ ls -lad .* 
. 
.. 
.dotdir 
$ ls -lad .?* 
.. 
.dotdir 

Sie sehen, dass in der zweiten ist . nicht enthalten, da es nur ein Zeichen lang ist. Der Glob ".?*" enthält nur Dateinamen, die mindestens zwei Zeichen lang sind (Punkt, plus ein beliebiges einzelnes Zeichen, nicht optional, plus eine Folge von null oder mehr Zeichen).

Übrigens ist find kein Bash-Befehl.

+0

"Finden ist kein Bash-Befehl" - guter Ruf, Titel geändert, um dies zu reflektieren – kostmo

2

Letzteres Befehl Pflaumen . sich selbst - das Verzeichnis, das Sie find gegen laufen - weshalb es keine Ergebnisse generiert.

+0

denke, du meinst "letzteres" – kostmo

Verwandte Themen