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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.