2017-02-07 23 views
0

Я пытаюсь выполнить итерацию в цикле, tar пару каталогов с каждой итерацией, а затем сравнить суммы md5 обоих из них. Я замечаю, что моя первая инструкция tar выдает файлы tar на один уровень выше фактического пути каталога. то есть заявление:tar command не создает файл .tar.gz

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

производит ${folder_name}.tar.gz в /tmp/psk1/, а не /tmp/psk1/hadoop_validation$ENV/

и второе утверждение дегтя:

tar -czvf ${folder_name}.tar.gz ${edge_base_dir}/wlossf$ENV/app/${folder_name} 

не производит архивный файл на всех. Я не могу найти его даже на одном уровне выше фактического пути.

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/$ {имя_папки}' –

ответ

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. Не о чем беспокоиться.