ubuntuusers.de

find - Ausschluß von '.' und '..'

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

Root-Me

Anmeldungsdatum:
27. Juni 2006

Beiträge: 157

Hey,

ich bekomme es gerade nicht hin über den find-Befehl das eigene Verzeichnis und das Eltern-Verzeichnis auszuschließen. Ziel ist es alle Verzeichnisse innerhalb eines bestimmten Verzeichnisses aufzulisten, um sie danach weiter zu bearbeiten, bis auf . und ..

Die Rohfassung sieht so aus:

1
find /dir/ -maxdepth 1 -type d)

Ich habe es mit einer Pipe und grep -v versucht, aber ohne Erfolg. Aber das liegt vielleicht auch daran, das ich falsch gequotet habe.

Ideen dazu?

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

Root-Me schrieb:

ich bekomme es gerade nicht hin über den find-Befehl das eigene Verzeichnis und das Eltern-Verzeichnis auszuschließen.

Was genau meinst Du mit "eigenes Verzeichnis" und das "Eltern-Verzeichnis"? Ausgehend vom Verzeichnis, welches Du "find" angibst? Oder ausgehend von dem Verzeichnis, in dem Du den find-Befehl aufrufst?

Lux Team-Icon

Avatar von Lux

Anmeldungsdatum:
10. November 2005

Beiträge: 5152

Wohnort: Grüt (Gossau ZH), Schweiz

Root-Me schrieb:

Ideen dazu?

1
find /dir -maxdepth 1 -type d ! \( -name . -o -name .. -o -name dir \)

Wobei hier bei mir "." und ".." nicht angezeigt werden.

1
find /dir -maxdepth 1 -type d ! -name dir

Gruss

Dirk

Root-Me

(Themenstarter)

Anmeldungsdatum:
27. Juni 2006

Beiträge: 157

Hallo zusammen,

Lysander schrieb:

Was genau meinst Du mit "eigenes Verzeichnis" und das "Eltern-Verzeichnis"? Ausgehend vom Verzeichnis, welches Du "find" angibst? Oder ausgehend von dem Verzeichnis, in dem Du den find-Befehl aufrufst?

Wenn du ein ls -la eingibst, siehst du einen . und ein .. Diese stehen für das Verzeichnis selbst und das Parent-Directory. Diese "Links" finest du in jedem Verzeichnis. Das Verzeichnis, dass ich mit find durchsuche hat die demnach auch und ich würde sie gerne los werden.

Lux schrieb:

1
find /dir -maxdepth 1 -type d ! \( -name . -o -name .. -o -name dir \)

Wobei hier bei mir "." und ".." nicht angezeigt werden.

1
find /dir -maxdepth 1 -type d ! -name dir

Gruss

Dirk

Also ich habe beide Varianten getestet und das Verzeichnis selbst wird noch immer expandiert. Da ich den find direkt in eine Variable schiebe, könnte es aber auch an fehlenden Quotes liegen. Am Besten ich zeig dir mal den ganzen Befehl.

1
2
DIRS=$(find /home/ -maxdepth 1 -type d !\( -name . -o -name .. \))
echo $DIRS

Das listet mir als ersten Treffer immer noch /home/ selbst auf. Aber interessant das man bei find auch mit Negierung und Verknüpfungen wie -o oder -a arbeiten darf. Wusste ich auch nicht.

Lux Team-Icon

Avatar von Lux

Anmeldungsdatum:
10. November 2005

Beiträge: 5152

Wohnort: Grüt (Gossau ZH), Schweiz

Root-Me schrieb:

Das listet mir als ersten Treffer immer noch /home/ selbst auf. Aber interessant das man bei find auch mit Negierung und Verknüpfungen wie -o oder -a arbeiten darf. Wusste ich auch nicht.

Deswegen habe ich das "-name dir", in Deinem Fall "-name home" hineingeschrieben.

Gruss

Dirk

Root-Me

(Themenstarter)

Anmeldungsdatum:
27. Juni 2006

Beiträge: 157

Hatte ich ebenfalls ausprobiert, hier aber ausgespart, weil es nichts verändert hat. In dem Fall wüsste ich auch nicht wozu noch den '.' mit einbeziehen, der expandiert doch zu home, oder? Bekommst du home nicht angezeigt, wenn du das bei dir laufen lässt?

Lux Team-Icon

Avatar von Lux

Anmeldungsdatum:
10. November 2005

Beiträge: 5152

Wohnort: Grüt (Gossau ZH), Schweiz

Root-Me schrieb:

Hatte ich ebenfalls ausprobiert, hier aber ausgespart, weil es nichts verändert hat. In dem Fall wüsste ich auch nicht wozu noch den '.' mit einbeziehen, der expandiert doch zu home, oder?

. expandiert zu gar nichts ... Der Punkt zeigt im Dateisystem auf das aktuelle Verzeichnis.

Bekommst du home nicht angezeigt, wenn du das bei dir laufen lässt?

Ich habe einen Slash weniger - find /home/ - als Du:

1
find /home -maxdepth 1 -type d ! -name home

Gruss

Dirk

Root-Me

(Themenstarter)

Anmeldungsdatum:
27. Juni 2006

Beiträge: 157

Ok alles klar, der Slash war es . Die Shell ist schon manchmal ein Biest ☺

Ganz versteh ich es nicht, mir wurden auch mit Slash alle innerhalb /home befindlichen Verzeichnisse angezeigt. Nur /home/ fehlt nun, da ich den angehängten Slash entfernt habe. Also vielen Dank jedenfalls, es klappt jetzt!

Antworten |