2017-02-07 5 views
0

私はループで反復しようとしています。それぞれの反復で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 

私はここで何が欠けていますか?どんな助けもありがとう。

ありがとうございます。

+3

'tar'は現在のフォルダ、つまり' $(pwd) 'にファイルを作成します。 – mouviciel

+0

@mouviciel、... btw、 '$ PWD'の使用を検討してください - ' $(pwd) 'は組み込み変数の値を吐き出すだけの場合と比較して(比較的)重いパフォーマンスコストを支払うサブシェルを生成します。 –

+1

@mouvicielが述べているように、tarは、スクリプトが実行されている場所を基準にしてzipファイルを作成しています。ファイルを作成するディレクトリに「cd」するか、コマンド自体に特定のディレクトリを指定することができます。 'tar cvzf path/to/new/file.tar.gz/tmp/psk1/hadoop_validation $ ENV/$ {folder_name}' –

答えて

1

コメントでmouvicielが言ったように、tarはデフォルトで現在の作業ディレクトリにファイルを作成します。

単にフォルダとtar.gzファイルをプレフィックスとあなたがそれをしたい場所、それはそれを作成します。

tar -czvf /tmp/psk1/hadoop_validation$ENV/${folder_name}.tar.gz /tmp/psk1/hadoop_validation$ENV/${folder_name} 

注意あなたがアーカイブされているのと同じフォルダ内にタールを作成されるように、その、あなたは出力の一部としてfile changed as we read it警告が表示されます。何も心配する必要はありません。

関連する問題