md5sumリストを簡単に更新するには?

md5sumリストを簡単に更新するには?

時には、大量のデータを保存するために信頼できないメディア(フラッシュ)を使用することがあります。少なくともビットフリップを識別するために、md5sumをファイルと共に保存します。ファイルは通常find -type f -exec "{}" \; >MD5SUM。残念ながら、私が使用したいくつかのマシンの時間が混乱していたので、それを使用することはfind -newer <file> -exec md5sum "{}"\; >>MD5SUMオプションではありません。基本的に、MD5SUMファイルで作成されたファイルのリストとMD5SUMファイルのリストのfind -type f違いを理解したいと思います。

シンプルでエレガントな方法でこれを行う方法についてのアイデアはありますか?よろしくお願いします!

ベストアンサー1

このプロセスが続行される場合は、古いファイルと新しいファイル(次回は古いファイルになる)の2つのファイルが必要です。

#!/bin/sh
# change directory to either first argument or to current directory
cd ${1:-"."} || exit 1 # if cannot cd, then exit
# get the md5 values for all the files in the directory tree
find . -type f -not -name .md5sum.last -exec md5sum {} \; | sort > .md5sum.tmp
# if called before, then get only the differences in the newer
if [ -f .md5sum.last ]; then
    comm -13 .md5sum.last .md5sum.tmp
else  # otherwise show all the output
    cat .md5sum.tmp
fi
# replace the older with the current for next time
mv .md5sum.tmp .md5sum.last

調和が核心sortです。comm -13順序は明らかですがcomm(「共通」の略)、最初のファイル(列1)、2番目のファイル(列2)、または2つのファイル(列3)の行を表示します。この-13オプションは「最初と3番目の列の削除」を意味し、前の列に属さず、両方の列に共通しない行のみを残します。残念ながら、ファイルのタイムスタンプを信頼できない場合、これは大規模なディレクトリツリーにとって非常に集約的なプロセスになります。

おすすめ記事