11 Stimmen

Versteckte Verzeichnisse mit dem GNU find-Befehl ignorieren/aussondern

Bei Verwendung des find Befehl erfolgreich versteckte Verzeichnisse (solche, die mit einem Punkt beginnen) ignoriert, während alles andere gefunden wird:

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

aber das wird überhaupt nicht passen:

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

Der einzige Unterschied ist das Fragezeichen. Sollte der letztgenannte Befehl nicht ebenfalls Verzeichnisse erkennen und ausschließen, die mit einem Punkt beginnen?

8voto

Dennis Williamson Punkte 322329

Der letztgenannte Befehl löscht alles, denn er löscht . - Probieren Sie diese aus, um den Unterschied zu sehen:

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

Das sehen Sie im zweiten Bild, . ist nicht enthalten, weil 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 beliebige Folge von null oder mehr Zeichen).

Im Übrigen, find ist kein Bash-Befehl.

1voto

Charles Duffy Punkte 255246

Der letztgenannte Befehl beschneidet . selbst - das Verzeichnis, in dem Sie find gegen - weshalb sie auch keine Ergebnisse liefert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X