파일 목록이 포함된 변수에서 여러 파일의 총 크기를 가져옵니다.

파일 목록이 포함된 변수에서 여러 파일의 총 크기를 가져옵니다.

파일 이름에 공백이 포함될 수 있는 일부 파일의 전체 크기를 확인하고 싶습니다.

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

du 프로세스 "\n"을 줄 구분 기호로 만드는 방법은 무엇입니까? 아니면 목록을 다르게 만들어야 할까요?

답변1

대신 배열을 사용하는 것이 좋습니다

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

du "${var2[@]}"

바라보다BashGuide/배열

답변2

내가 찾은 해결책은 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"

관련 정보