xargs -Ifile du -sch file <filelist
Если ни одно имя файла не содержит символ новой строки, приведенный выше вызов будет вызывать du -sch
для каждого имени в списке filelist
. -Ifile
заставит xargs
заменить строку file
в команде du -sch file
на каждое имя, прочитанное из filelist
.
Это позволит корректно обрабатывать имена файлов с пробелами и шаблонами подстановки оболочки (шаблоны не будут расширены).
Поскольку вы не заключили подстановку команд в кавычки, здесь происходит разделение слов в соответствии со значением IFS
(пробел, табуляция, новая строка по умолчанию). У вас есть место в имени файла, поэтому, например./tmp-directory/connector_db_connector_db
разбивается на два слова — /tmp-directory/connector_db_
, connector_db
.
Вы можете перебирать имена файлов одно за другим:
while IFS= read -r file; do du -sch -- "$file"; done <filelist
Поскольку ваш файл большой, это может занять некоторое время.
Кроме того, поскольку файлы анализируются по отдельности, у вас не будет общего размера, показанного du
. Таким образом, вы можете удалить -s
и -c
:
while IFS= read -r file; do du -h -- "$file"; done <filelist