Щоб надрукувати імена всіх файлів розміром 0 $ і менше, розміром 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.