2013-05-07 2 views
1

мне удалось получить md5sum файлов внутри архива без использования файловой системы благодаря:получить контрольную сумму файлов внутри архива дегтя на удаленном хосте

tar tjf '/home/adup/mybackup.tar.bz2' | sort | grep -v '/$' | 
(while read filename; 
    do md5=$(tar xjOf '/home/adup/mybackup.tar.bz2' $filename | md5sum | awk '{print $1}'); 
    echo "$md5 $filename"; 
done) 

К сожалению, то, что мне нужно это делать на удаленный хост через SSH как:

ssh 192.9.202.44 tar tjf '/home/adup/mybackup.tar.bz2' | sort | grep -v '/$' |( while read filename; do md5=$(tar xjOf '/home/adup/mybackup.tar.bz2' $filename | md5sum | awk '{print $1}'); echo "$md5 $filename"; done) 

Но так это не работает, один из команды дегтя интерпретируется локально и дать мне такую ​​ошибку:

tar (child): /home/adup/mybackup.tar.bz2 : no such file 

Пожалуйста, кто-нибудь может сказать мне, как действовать?

Спасибо заранее,

ответ

2

Вам необходимо пройти SSH команды, которые должны выполняться удаленно, так как одну строку:

ssh 192.9.202.44 "tar tjf '/home/adup/mybackup.tar.bz2' | sort | grep -v '/\$' |( while read filename; do md5=\$(tar xjOf '/home/adup/mybackup.tar.bz2' \$filename | md5sum | awk '{print $1}'); echo "\$md5 \$filename"; done)" 

Кроме того, убедитесь, что символы, такие как $, которые интерпретируются локальной оболочкой , цитируются.

Чем дольше работает скрипт, тем легче сделать ошибку, делая все это. Может быть проще написать «нормальный» сценарий оболочки, скопировать его на удаленный хост с помощью scp, а затем выполнить с помощью ssh.

+0

Отлично! Часы, которые я пытался добиться, и вы сделали это через 5 минут. Большое вам спасибо за адаптацию. Я попытался процитировать всю команду, но не для того, чтобы избежать $ символов, это был трюк. РЕШИТЬ! –

+0

Я делал что-то подобное пару недель назад, поэтому я хорошо знал все ловушки :) Рад, что я мог бы помочь. Не возражаете ли вы пометить ответ как правильный? Благодарю. – piokuc

1

Простейшее и самое быстрое решение:

ssh 192.9.202.44 "tar --to-command=md5sum -xvjf /home/adup/mybackup.tar.bz2 | paste - -" 

это должно производить выход, как:

plik_1 21576a19c7e336a86b6f37578a1b9f4d - 
plik_2 90811da0150573efaba9c9d6aa1c4ea2 - 

С уважением,

Смежные вопросы