So drucken Sie die Namen aller Dateien in und unter $ dir der Größe 0:
find "$dir" -size 0
Beachten Sie, dass nicht alle Implementierungen find
von standardmäßig eine Ausgabe erzeugen. Daher müssen Sie möglicherweise Folgendes tun:
find "$dir" -size 0 -print
Zwei Kommentare zur letzten Schleife in der Frage:
Anstatt über jedes andere Wort in einer Zeichenfolge zu iterieren und zu prüfen, ob die alternativen Werte Null sind, können Sie das Problem mit Leerzeichen teilweise beseitigen, indem Sie über Zeilen iterieren. z.B:
printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
test "$size" -eq 0 && echo "$path"; done
Beachten Sie, dass dies in Ihrem Fall fehlschlägt, wenn einer der von ls ausgegebenen Pfade Zeilenumbrüche enthält. Dies verstärkt 2 Punkte: Nicht analysieren ls
und eine vernünftige Benennungsrichtlinie verwenden, die keine Leerzeichen in Pfaden zulässt.
Zweitens ist es zur Ausgabe der Daten aus der Schleife nicht erforderlich, die Ausgabe in einer Variablen nur dafür zu speichern echo
. Wenn Sie die Schleife einfach ihre Ausgabe in stdout schreiben lassen, erreichen Sie dasselbe, vermeiden jedoch das Speichern.
man find
.