Obtém o tamanho total de vários arquivos de uma variável que contém uma lista de arquivos

1

Eu quero descobrir o tamanho total de alguns arquivos cujos nomes de arquivo podem conter espaços em branco:

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

Eu coloco esses nomes de arquivos em variáveis e faço uma lista:

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

Agora, se eu me verificar e imprimir esta lista, tudo parece OK:

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

Mas se eu tentar obter o tamanho total, de alguma forma, ele não entenderá o símbolo "\ n"

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

Como faço du process "\ n" como separador de linha? Ou talvez eu tenha que criar uma lista de uma maneira diferente?

    
por Alessandro Cattaneo 18.09.2016 / 00:35

2 respostas

0

A solução que encontrei foi dividir var2 linha por linha em while loop:

#!/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"
    
por 02.10.2016 / 16:39
3

Sugiro usar uma matriz

var2=( "$var0" "$var1" )

du "${var2[@]}"

Veja BashGuide / Arrays

    
por 18.09.2016 / 00:44