AIX: Finden Sie nicht leere Verzeichnisse

2993
Brian Henk

In vielen Unix-Systemen könnten Sie so etwas tun

find . -type d ! -empty 

In einem AIX-System wird -empty nicht erkannt. Irgendwelche Ideen, wie ich dasselbe tun könnte?

3

2 Antworten auf die Frage

4
Peter Cordes

Dan McG hat die richtige Idee. Das funktioniert:

find . -type d -links 2 -exec sh -c '[ -z "$(ls -UA "$1/" )" ]' dummy {} \; -print 

-links 2 spart Zeit, indem Verzeichnisse mit Unterverzeichnissen ausgeschlossen werden, denn wenn AIX mit den meisten Unix-Systemen identisch ist, können nur Verzeichnisse eigene Verzeichnisse haben. Eintrag und die .. Einträge in seinen Nebenverben.

ls -UA kümmert sich nicht um das Sortieren (-U) und muss die Dateien nicht statisieren, sondern nur ausgeben, was sie von readdir erhält, also ist es nicht so schlimm. -Auslasse. und .. Wenn also die Ausgabe die leere Zeichenfolge ist, war das Verzeichnis leer.

Wenn Sie trotzdem sh -c aufrufen, können Sie das, was Sie benötigen, direkt im sh tun, anstatt die Ausgabe von find -print0 zu verwenden. Bei einem zu schlechten Nicht-GNU-Fund ist -exec {} + nicht vorhanden (dh Xargs sind eingebaut).

Wenn Sie die Ausgabe von find verarbeiten, können Sie dies möglicherweise effizienter durchführen. Wenn Sie z. B. zwei Verzeichnisse ohne Datei anzeigen, haben Sie ein leeres Verzeichnis. Es ist jedoch nicht so langsam, sh -c und ls für jedes Verzeichnis auszuführen.

3
Dan McGrath

Zum einen wird im POSIX-Standard für find keine Angabe gemacht, weshalb es nicht von allen Versionen unterstützt wird.

Ich weiß nicht genau, wie es geht, aber dies könnte Sie in eine Richtung weisen, um es zu lösen.

find . -type d -exec command '{}' \; 

Dadurch wird 'command' für jedes Verzeichnis ausgeführt, das das Verzeichnis als Argument enthält.

Jetzt können Sie etwas verwenden:

find . -type d -exec sh -c 'ls -R $1 | wc' dummy {} \; 

Natürlich funktioniert das nicht, aber es kann ein bisschen helfen!

Das sollte sh -c '...' Dummy {} \ sein. Das erste Argument für sh -c wird $ 0. Das hat mich beim ersten Mal versucht, -exec sh ... Peter Cordes vor 14 Jahren 0
Danke Peter, ich spiele nicht oft mit unserem AIX-System außerhalb der Grundnutzung. :) Dan McGrath vor 14 Jahren 0