получить контрольную сумму файлов внутри архива tar на удаленном хосте

Мне удалось получить 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 интерпретируется локально и дает мне такую ​​​​ошибку:

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

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

Заранее спасибо,


person ad_igs    schedule 07.05.2013    source источник


Ответы (3)


Вам нужно передать по 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.

person piokuc    schedule 07.05.2013
comment
Большой! Часы, которые я пытался преуспеть, а вы сделали за 5 минут. Большое спасибо за адаптации. Я попытался заключить в кавычки всю команду, но не экранировать символы $, в этом была хитрость. РЕШЕНО! - person ad_igs; 07.05.2013
comment
Я делал что-то подобное пару недель назад, поэтому хорошо знал все ловушки :) Рад, что смог помочь. Вы не против пометить ответ как правильный? Спасибо. - person piokuc; 07.05.2013

Самое простое и быстрое решение:

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

это должно привести к выводу, например:

plik_1 21576a19c7e336a86b6f37578a1b9f4d  -
plik_2 90811da0150573efaba9c9d6aa1c4ea2  -

С уважением,

person NiebieskiLuk    schedule 07.04.2016

Так как в прошлой версии папки не были удалены, здесь немного другой подход для локального и удаленного архива:

локальный архив:

tar --to-command=md5sum -xvf 20180405181352.tar |grep -v /$ | paste - - > md5sum_local.txt

удаленный архив:

ssh user@host "cat /path/myfile.tar" | tar --to-command md5sum -xvf - | egrep -v /$ | paste - - > md5sum_remote.txt
person Harald Schmidt    schedule 06.04.2018