Другой подход: мы просто нуждаемся в размере файла и не заботимся об именах файлов, таким образом, мы можем избавиться от любых "странных" имен файлов, таких как "имена с CR в них, имена с пробелами, и т.д.":
find /some/path -maxdepth 2 -type f -ls -exec printf '\000' \; \
| tr -cd ' -~\000' \
| tr '\000' '\n' \
| awk '{ sum+=$7 } END { print "total size: ",sum }'
Прием:
1) мы печатаем вывод "-ls" каждого файла, СОПРОВОЖДАЕМЫЙ "\000" символ (на следующей строке, но это не проблема, посмотрите шаг 2),
2) мы избавляемся от всего 'non-ascii-printable' (включая '\t' и '\n'. Но мы действительно сохраняем также \000 в дополнение к "регулярному" печатаемому ASCII, поскольку нам нужен он для знания, где строка каждого файла заканчивается!). Тем путем имена файлов больше не имеют никаких причуд в них (никакой '\n', никакой '\t', не''; и т.д.). Мы действительно сохраняем пробелы также, поскольку нам нужны они также для обнаружения 7-го поля "-ls", т.е. размера файла
3) мы переводим добавленные '\000' в '\n' (шаг 2), избавленный от тех также, в случае, если некоторые имена файлов содержали их также!)
4) затем мы добавляем 7-й столбец для получения заключительного размера в байтах.
Это очень портативно (не нуждайтесь в "-print0", и т.д.),