У меня есть файл, содержащий список файлов, которые я хотел бы узнать общий размер файлов. Есть ли команда для этого?
Моя ОС - это очень простой Linux (Qnap TS-410).
РЕДАКТИРОВАТЬ:
Несколько строк из файла:
/ поделиться / архив / Bailey Test / BD006 / 0.tga
/ поделиться / архив / Bailey / BD007 / 1 версия 1.tga
/ поделиться / архив / Bailey 2 / BD007 / example.tga
Ответы:
Я полагаю, что-то вроде этого будет работать в busybox:
У меня не такая среда, как у вас, но если у вас возникнут проблемы с пробелами в именах файлов, то что-то вроде этого тоже подойдет:
Изменить 1 :
@stew прямо в своем посте ниже, du показывает использование диска, а не точный размер файла. Чтобы изменить поведение busybox использует флаг -a, поэтому попробуйте:
du -a "$file"
для точного размера файла и сравните вывод / поведение.источник
/usr/bin/du: Argument list too long
(почти 80 000 строк в моем файле). Ваша вторая команда просто дает мне подсказку, когда я нажимаю Enter, ожидая чего-то большего?cat tgafiles.txt | while read file;do du "$file" done | awk '{i+=$1} END {print i}'
. спасибо маттиасcat tgafiles.txt | while read file;do du "$file";done | awk '{i+=$1} END {print i}'
(то есть, прежде чем сделать).-c
добавляет строку «общий размер»;tail -1
занимает последнюю строку (с общим размером);cut -f 1
вырезает слово «всего».источник
Я не знаю, способны ли ваши инструменты Linux на это, но:
Сделайте так, xargs установит разделитель как символ новой строки, а du произведет для вас общий итог.
Глядя на http://busybox.net/downloads/BusyBox.html, кажется, что «busybox du» будет поддерживать опцию общего итога, но «busybox xargs» не будет поддерживать пользовательские разделители.
Опять же, я не уверен в вашем наборе инструментов.
источник
xargs: invalid option -- d
-c
так как xargs будет делать несколько вызовов,du
если список файлов достаточно длинный, производя несколькоdu
итогов.Это похоже на решение Маттиаса Анберга. Использование «read» позволяет обойти проблемы с именами файлов / каталогами с пробелами. Я использую
stat
вместо того,du
чтобы получить размер файла. du получает объем памяти, который он использует на диске, а не размер файла, который может отличаться. В зависимости от вашей файловой системы, 1-байтовый файл все равно будет занимать 4 КБ на диске (или каков бы ни был размер блока). Таким образом, для 1-байтового файла stat сообщает 1 байт, а du - 4k.источник
stat
команду:stat: command not found
stat: applet not found
в этом случаеВот еще одно решение проблемы:
источник
du -bc
работает намного быстрее.Попробуйте что-то вроде этого:
Чтобы правильно обрабатывать пробелы в путях:
источник
find
?find
вместо реальногоfind
двоичного файла используется урезанный busybox .cat docs.txt | xargs -d \\n du -sk | awk '{total+=$1} END{print total}'
источник