私はループで反復しようとしています。それぞれの反復で2つのディレクトリを作成し、両方のmd5の合計を比較します。最初のtarステートメントは、ディレクトリの実際のパスの1つ上のレベルのtarファイルを生成します。すなわち声明:tarコマンドは.tar.gzファイルを生成しません
tar -czvf ${folder_name}.tar.gz /tmp/psk1/hadoop_validation$ENV/${folder_name}
が/tmp/psk1/
はなく/tmp/psk1/hadoop_validation$ENV/
と第二タール文で${folder_name}.tar.gz
を生成します。
tar -czvf ${folder_name}.tar.gz ${edge_base_dir}/wlossf$ENV/app/${folder_name}
は全くtarファイルを生成しません。私は実際のパスの上の1つのレベルでもそれを見つけることができません。
hdfs dfs -ls /haas/wlf/wlossf$ENV/app | while read rec; do
echo $rec
folder_path=`echo ${rec} | awk -F ' ' '{print $8}'`
folder_name=`echo ${folder_path} | awk -F '/' '{print $6}'`
if [ ! -z ${folder_name} ] && [ ! -z ${folder_path} ]; then
hdfs dfs -get ${folder_path} /tmp/psk1/hadoop_validation$ENV/
if [ $? -eq 0 ]; then
echo "Hadoop to local copy job Successful"
else
echo "Hadoop to local copy job Failed"
fi
tar -czvf ${folder_name}.tar.gz /tmp/psk1/hadoop_validation$ENV/${folder_name}
hadoop_md5=$(md5sum /tmp/psk1/hadoop_validation$ENV/${folder_name}.tar.gz)
tar -czvf ${folder_name}.tar.gz ${edge_base_dir}/wlossf$ENV/app/${folder_name}
edge_md5=$(md5sum ${edge_base_dir}/wlossf$ENV/app/${folder_name}.tar.gz)
if [ ${hadoop_md5} == ${edge_md5} ]; then
echo "${folder_name} is good"
else
echo "${folder_name} is bad"
fi
fi
echo ${folder_name}
echo ${folder_path}
done
私はここで何が欠けていますか?どんな助けもありがとう。
ありがとうございます。
'tar'は現在のフォルダ、つまり' $(pwd) 'にファイルを作成します。 – mouviciel
@mouviciel、... btw、 '$ PWD'の使用を検討してください - ' $(pwd) 'は組み込み変数の値を吐き出すだけの場合と比較して(比較的)重いパフォーマンスコストを支払うサブシェルを生成します。 –
@mouvicielが述べているように、tarは、スクリプトが実行されている場所を基準にしてzipファイルを作成しています。ファイルを作成するディレクトリに「cd」するか、コマンド自体に特定のディレクトリを指定することができます。 'tar cvzf path/to/new/file.tar.gz/tmp/psk1/hadoop_validation $ ENV/$ {folder_name}' –