LINUX.ORG.RU

Размер файлов на shell


0

0
есть файл files.txt, в котором перечислены имена других файлов, например, так:
path_to_file1
path_to_file2
path_to_file3


нужно померять суммарный размер этих файлов
делаю так
CONTENT=`cat files.txt`
SIZE=`du --block-size=1M -c $CONTENT | tail -n 1 | awk '{ print $1 }'`

Но начинаются проблемы, если в имени файлов есть пробелы.
Подскажите решение плиз.

Заранее благодарен.
anonymous
У меня нем linuxa под рукой, но я обычно делаю что-то вроде этого:

ls -l `cat files.txt` | awk '{size = size + $5; print $5}' | tail -1

$5 = размер файла в байтах.
anonymous
()
> Но начинаются проблемы, если в имени файлов есть пробелы. Подскажите решение плиз.

Переименовать такие файлы. Пробелы в именах файлов - маздай. Пробел - разделитель и только разделитель.

anonymous
()
Ответ на: комментарий от anonymous
> ls -l `cat files.txt` | awk '{size = size + $5; print $5}' | tail -1 
если имена файлов из files.txt  будут с пробелами - то
ls -l `cat files.txt`
также завершится с ошибкой
anonymous
()
Ответ на: комментарий от anonymous
>Переименовать такие файлы. Пробелы в именах файлов - маздай. Пробел - разделитель и только разделитель.

Правов такие не имею :)

anonymous
()
Ответ на: комментарий от anonymous
или так:

ls -l `cat files.txt | awk '{print "\"" $* "\""}'`

anonymous
()
Ответ на: комментарий от anonymous
> cat files.txt | sed /^/ls /
похоже не совсем верно
выдает 
sed: -e expression #1, char 5: Extra characters after command
в sed я не силен, может быть вы подскажете как исправить?
anonymous
()
Ответ на: комментарий от anonymous
>cat files.txt | sed /^/ls / > files.sh 
>chmod 755 files.sh 
>./files.sh | awk '{size = size + $5; print $5}' | tail -1 

поправил на 
cat /root/burndata.XXXX | awk '{print "\"" $0 "\""}' | sed -e "s/^/ls -l /g" > files.sh
отрабатывает верно
но вот
./files.sh | awk '{size = size + $5; print $5}' | tail -1
не суммирует
а выдает размер одного файла, может быть size  при каждой новой строке обнуляется...
anonymous
()
Ответ на: комментарий от anonymous
Разобрался
надо было 
./files.sh | awk '{size = size + $5; print size}' | tail -1

Всем спасибо за помощь!
anonymous
()
eval du --block-size=1M -c `sed 's/.*/"&"/' file_list`
sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.