Aby wydrukować nazwy wszystkich plików w $ dir i poniżej o rozmiarze 0:
find "$dir" -size 0
Zwróć uwagę, że nie wszystkie implementacje find
domyślnie będą generować dane wyjściowe, więc może być konieczne wykonanie:
find "$dir" -size 0 -print
Dwie uwagi na temat ostatniej pętli w pytaniu:
Zamiast iterować po każdym innym słowie w ciągu i sprawdzać, czy wartości alternatywne są równe zero, możesz częściowo wyeliminować problem z białymi znakami, wykonując iterację po liniach. na przykład:
printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
test "$size" -eq 0 && echo "$path"; done
Zauważ, że to się nie powiedzie w twoim przypadku, jeśli którakolwiek ze ścieżek wyjściowych ls zawiera znaki nowej linii, a to wzmacnia 2 punkty: nie analizuj ls
znaki i miej rozsądną politykę nazewnictwa, która nie zezwala na spacje w ścieżkach.
Po drugie, aby wyprowadzić dane z pętli, nie ma potrzeby zapisywania danych wyjściowych w zmiennej tylko do echo
niej. Jeśli po prostu pozwolisz pętli zapisać swoje wyjście na stdout, osiągniesz to samo, ale unikniesz przechowywania go.
man find
.