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

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

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» в качестве разделителя строк? Или, может быть, мне нужно создать список по-другому?

  • посетить все каталоги под управлением версий
  • Добавлять файл, выводить на экран и перенаправлять из stderr все сразу, без тройника
  • $ @ и 'set env $ PATH' - зачем это утверждение входит в .inputrc?
  • Как поменять два последних аргумента командной строки?
  • Когда полезно использовать «grep - SOMEPATTERN»?
  • переименование различных файлов
  • Нельзя отступать heredoc, чтобы соответствовать отступу вложенности
  • Как предотвратить использование оболочки звонящего в sudo
  • 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" 
    Linux и Unix - лучшая ОС в мире.