ファイル名にスペースを含めることができるいくつかのファイルの合計サイズを確認したいと思います。
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
答え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"