2009-05-02 5 views
22

Ich habe ein Verzeichnis mit mehreren Unterverzeichnissen. Ich möchte nur die Unterverzeichnisse auflisten, die mindestens eine Datei enthalten. Wie kann ich das machen?Wie listet man nicht-leere Unterverzeichnisse auf Linux auf?

+0

Wollte Sie nur Verzeichnisse, die direkte Unterverzeichnisse Ihres Verzeichnisses sind, oder * alle * Unterverzeichnisse nicht egal wie tief verschachtelt? – Naaff

+0

Wenn ein Unterverzeichnis andere Unter-Unterverzeichnisse aber keine Dateien enthält, möchte ich nicht, dass es – Jaelebi

Antwort

39
find . -mindepth 1 -maxdepth 1 -not -empty -type d 

geben Ihnen alle nicht leere Verzeichnisse. Wenn Sie Verzeichnisse ausschließen möchten, die nur andere Verzeichnisse (aber keine Dateien) enthalten, könnte eine der anderen Antworten besser sein ...

+0

Die Optionen -mindepth und -maxdepth beschränken dies nur auf die unmittelbaren Unterverzeichnisse. Passen Sie diese an, um zu bestimmen, auf welcher Ebene Ergebnisse zurückgegeben werden. Wenn Sie sie auslassen, werden alle Unterverzeichnisse auf jeder Ebene gefunden. – Naaff

+0

und denken Sie daran, dass es sich nicht um GNU-Zeug handelt. Um tragbar zu sein, verwenden Sie! statt -nicht (wirklich; ich sehe nicht, warum du nicht immer nur benutzen würdest! statt -nicht, da -nicht gibt dir überhaupt keinen Vorteil) – lhunath

+0

Weil! Sieht so aus, als ob es ein Shell-Metazeichen sein sollte und ich kann mich nie erinnern, ob ich es zitieren muss oder nicht ;-), aber du hast recht damit, dass es tragbarer ist. (Ich denke, seit diese Antwort akzeptiert wurde, funktioniert GNU-spezifische Syntax für das OP) –

3

Wie wäre:

find /nominated/directory -type f | 
sed 's%/[^/]*$%% | 
sort -u 

Dateien finden - drop Dateiname Teil - Art einzigartig.

Es werden keine Unterverzeichnisse aufgelistet, die nur andere Unterverzeichnisse enthalten.

5
find . -type f -print0 | xargs -0 -n 1 dirname | sort -u 
+0

aufgelistet ist. Etwas kürzere Syntax für das gleiche: find. -type f -exec Verzeichnisname {} \; | Sortierung -u –

+0

Entsetzlich leid. Ein unübertroffenes einzelnes Zitat verursachte frühe Beendigung. Total meine Schuld. –

Verwandte Themen