アプリ版:「スタンプのみでお礼する」機能のリリースについて

<コマンド>
find /var/log/squid/ -type f -exec md5sum {}
find /mnt/backup/squid/ -type f -exec md5sum {}

にて同じファイルからmd5sumで取得しました。

<結果>
ff6bf6f97dc90b05a950015c17fb8146 /var/log/squid/squid.log-20130202.gz
ff6bf6f97dc90b05a950015c17fb8146 /mnt/backup/squid/squid.log-20130202.gz

2つのsquid.log-20130202.gz が同じものか比較したいのですが、
前のパス「/var/log/squid/」「 /mnt/backup/squid/」が異なるために
比較しても異なるファイルとみなされます。
cutコマンドでパイプしてみたりしたのですが、
今度は、どちら側のファイルmd5sum結果だったかわからなくなってしまいます。(mntか?varか?)

<cut対応>
find /var/log/squid/ -type f -exec md5sum {} \; | cut -d "/" -f1,5
→結果:ff6bf6f97dc90b05a950015c17fb8146 /squid.log-20130202.gz

<質問>
「/var/log/squid/」「 /mnt/backup/squid/」の部分が異なっていても、
ファイル名(squid.log-20130202.gz)とmd5sum値が同じなら、同じという結果を出すコマンドライン、
またはシェルスクリプトで対応できる方法を探しています。

ご教授お願いします。

A 回答 (3件)

find /var/log/squid/ -type f -exec md5sum {} \; | cut -d "/" -f1,5 > varlog.txt


find /mnt/backup/squid/ -type f -exec md5sum {} \; | cut -d "/" -f1,5 >backup.txt

diff -U 0 varlog.txt backup.txt
結果はこんな感じで。
--- varlog.txt 2012-12-31 21:49:55.175255302 +0900
+++ backup.txt 2012-12-31 23:19:36.000000000 +0900
@@ -6 +6 @@
-ff6bf6f97dc90b05a950015c17fb8146 /squid.log-20130202.gz
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /squid.log-20130202.gz

先頭が-の行がvarlog.txtで、+の行がbackup.txt
    • good
    • 0
この回答へのお礼

>find /var/log/squid/ -type f -exec md5sum {} \; | cut -d "/" -f1,5 > varlog.txt
>find /mnt/backup/squid/ -type f -exec md5sum {} \; | cut -d "/" -f1,5 >backup.txt
>diff -U 0 varlog.txt backup.txt

教えて頂いた内容が一番簡単に結果を求めることが出来ました。
これなら、簡単に応用も効くし、やりたいこともできますね。
情報ありがとうございました。

お礼日時:2013/02/20 12:19

> 2つのsquid.log-20130202.gz が同じものか比較したいのですが、



ファイルを比較したいだけなら何も md5 にこだわらずに
cd /var/log && find ./squid -type f -exec cmp '{}' '/mnt/backup/{}' \;
とか、いっそ rsync を --dry-run で動かしてみるとか手はあるけど?
    • good
    • 0
この回答へのお礼

>ファイルを比較したいだけなら何も md5 にこだわらずに
すみません。どうしても今回はmd5なので、md5で質問しました。

>cd /var/log && find ./squid -type f -exec cmp '{}' '/mnt/backup/{}' \;
たしかにこれもありですね。
情報ありがとうございました。

お礼日時:2013/02/20 12:17

いまいち、やりたいことがよく判らないのですが……


ファイル名が同じでmd5sumが異なった場合はどうしたいのでしょう?


とりあえず、掲示されている条件で私がやるとしたら…

find /var/log/squid/ -type f -exec md5sum {}
find /mnt/backup/squid/ -type f -exec md5sum {}
で同じファイルにリダイレクトしてファイル化します。
# 後から実行する方は追記で。
sortコマンドでmd5ハッシュをキーにソートします。
a)1つ目のmd5ハッシュとファイル名(フルパス)をシェル変数に取り込み。
b)2つ目のmd5ハッシュとファイル名(フルパス)も別のシェル変数に取り込み。
c)md5ハッシュを比較。
c-1)違った場合はaに戻る(ファイル名の表示もする…んですかの?)
d)basenameコマンドでaで取得したファイル名とbで取得したファイル名を取り出して比較。
d-1)違った場合はaに戻る(ファイル名の表示もする…んですかの?)
e)同一のファイルとして表示(パス名も表示するんですかの?)
f)aに戻る。

って感じでしょうか……。
    • good
    • 0
この回答へのお礼

>ファイル名が同じでmd5sumが異なった場合はどうしたいのでしょう?
コピーした2つのファイルを比較して、md5値が異なれば違うファイルと判断できると思ったからです。
というか、そのやり方しかあまり思いつかなかったのです。
Linuxあまり詳しくないので…。

>やり方について
やり方の提示ありがとうございました。

お礼日時:2013/02/20 12:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!