0

zipファイルの内容を制御ファイルの内容と照合する簡単なスクリプトを作成しました。

正常に動作しますが、スペースが含まれているファイルを受信すると、エラー(実際には存在しません)で失敗します。これは私のコードのスニペットです(nameZIPファイルを一括処理するために作成された配列です)。

echo "`date '+%m/%d/%y %T:'` List ZIP file contents."                                          
LIST_Array=(`/usr/bin/unzip -l $name | head -n -2|tail -n +4 | sort -r | awk '{print $4}'`)
LISTlen=${#LIST_Array[*]}
#iterate array to 1) build report and 2) look for control file
echo "`date '+%m/%d/%y %T:'` Iterate array to 1) build report and 2) look for control files."  
echo -e "`date '+%m/%d/%y %T:'` Files in ZIP file: $name\n"                                    >> $name.report.out
for (( i = 0 ; i < ${#LIST_Array[@]} ; i++ ))
do
    echo -e "${LIST_Array[$i]}"      >> $name.report.out
done

ZIP内のファイルのリストがキャプチャされ$name.report.out、制御ファイル自体の内容と比較されます。

スペースのあるファイルを正しく表示するにはどうすればよいですか?私echo -eは助けになるでしょうが、それは一見効果がないようです。

ありがとう。

4

1 に答える 1

2

したがって、zipファイルにはファイルが含まれており、その名前の一部には空白が含まれています。その場合、ファイルを一覧表示すると、awk'{print$4}'はファイル名全体をキャプチャしません。read最後の引数が残りの行をキャプチャするという点で優れています。

LIST_Array=()
while read length date time filename; do
    LIST_Array+=( "$filename" )
done < <(/usr/bin/unzip -qql "$name")
于 2012-07-23T23:02:18.547 に答える