Чтобы напечатать имена всех файлов в $ dir и ниже размера 0:
find "$dir" -size 0
Обратите внимание, что не все реализации find
будут производить вывод по умолчанию, поэтому вам может потребоваться:
find "$dir" -size 0 -print
Два комментария к последнему циклу в вопросе:
Вместо того, чтобы перебирать каждое второе слово в строке и проверять, равны ли альтернативные значения нулю, вы можете частично устранить проблему с пробелами, перебирая строки. например:
printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
test "$size" -eq 0 && echo "$path"; done
Обратите внимание, что это не удастся в вашем случае, если какой-либо из путей, выводимых ls, содержит символы новой строки, и это усиливает 2 пункта: не анализировать ls
и иметь разумную политику именования, которая не допускает пробелов в путях.
Во-вторых, для вывода данных из цикла нет необходимости сохранять вывод в переменной только для echo
него. Если вы просто позволите циклу записывать свой вывод в stdout, вы выполните то же самое, но не сохраните его.
man find
.