2

次のおかげで、ファイルシステムを使用せずにアーカイブ内のファイルの 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 コマンドの 1 つがローカルで解釈され、次のようなエラーが発生します。

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

お願いします、どなたか教えていただけないでしょうか?

前もって感謝します、

4

3 に答える 3

3

リモートで実行するコマンドを 1 つの文字列として 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です。

于 2013-05-07T15:59:58.233 に答える