Получить общий размер нескольких файлов из переменной, содержащей список файлов

Я хочу узнать общий размер некоторых файлов, имена файлов которых могут содержать пробелы:

cd /tmp touch "a0 1" touch "a1 1" 

Я помещаю эти имена файлов в переменные и составляю список:

 var0="/tmp/a0 1" var1="/tmp/a1 1" var2=`echo -e "$var0\n$var1"` 

Теперь, если я проверю себя и распечатаю этот список, все будет хорошо:

 echo "$var2" #returns: #/tmp/a0 1 #/tmp/a1 1 

Но если я попытаюсь получить общий размер, он как-то неправильно понимает символ «\ n»

 du "$var2" #returns: #du: cannot access '/tmp/a0 1\n/tmp/a1 1': No such file or directory 

Как создать процесс «\ n» в качестве разделителя строк? Или, может быть, мне нужно создать список по-другому?

  • / var House Keeping
  • Почему du сообщает размер 0 для некоторых непустых файлов на разделе HFS +?
  • Найдите общее использование диска, не включая файлы, содержащие строку
  • Список владельцев файлов
  • Команда dd указывает на недостаточное дисковое пространство - пытается отформатировать SD-карту для малины pi
  • Файл журнала 29GB на Монетный двор Linux на разделе 38 ГБ
  • Установка подкаталога дома на собственный раздел сбивает с толку отчет об использовании диска
  • Почему мой tar-файл больше, чем резервная копия каталога
  • 2 Solutions collect form web for “Получить общий размер нескольких файлов из переменной, содержащей список файлов”

    Я бы предложил использовать массив

     var2=( "$var0" "$var1" ) du "${var2[@]}" 

    См. BashGuide / Массивы

    Решение, которое я нашел, состояло в том, чтобы разделить var2 по очереди в цикле while:

     #!/bin/bash var0="/tmp/a0 1" var1="/tmp/a1 1" var2="$(echo -e "$var0\n$var1")" totalsize=0; #this will make script return 0 if var2 somehow contains empty lines only while read "opened_file" #for each file in list do do if [ ! -z "$opened_file" ]; then #if variable is not empty tmp1="$(du -b "$opened_file" | cut -d" " -f1)" #get size of current file and strip unnecessary fields totalsize=$(($totalsize + $tmp1)) fi done <<< "$(echo -e "$var2")" echo "$totalsize" 
    Interesting Posts

    Создание vim редактора по умолчанию при двойном щелчке файла

    Сценарий, выполняемый отлично от разрывов файлов при выполнении с помощью Heredoc (в установке PHPmyadmin)

    Короткий способ вызвать мой скрипт bash вместо использования команды Source

    Зачем использовать install, а не cp и mkdir?

    Ошибка во время загрузки, которую я не вижу

    Apache 000-default.conf – странное поведение

    Как вызвать скрипт оболочки из кода Javascript?

    shift: both_capslock отключает нормальное смещение

    monkeysphere to gnupg 2.1 изменение рабочего процесса

    egrep regular expression – одно и то же слово в начале и в конце

    Как исследовать X11, не видя нажатия клавиши?

    Как настроить 'at' и 'sendmail' для вывода почты с помощью Content-Type: text / html

    Какие файловые системы Linux для USB-накопителей?

    Как я могу узнать, является ли относительная символьная ссылка внутренней для определенного поддерева или нет?

    Как остановить программу, которая не отображается с помощью monit?

    Linux и Unix - лучшая ОС в мире.