diff
onを使用して md5 列のみを比較し、 を使用して追加または削除された行の行番号のみを出力するように<(cut -c -32 md5sums.sort.XXX)
指示します。これをパイプして、ファイルからそれらの行のみを出力します。diff
--old/new-line-format='%dn'$'\n'
ed md5sums.sort.XXX
md5sums.sort.XXX
diff \
--new-line-format='%dn'$'\n' \
--old-line-format='' \
--unchanged-line-format='' \
<(cut -c -32 md5sums.sort.old) \
<(cut -c -32 md5sums.sort.new) \
| ed md5sums.sort.new \
> files-added
diff \
--new-line-format='' \
--old-line-format='%dn'$'\n' \
--unchanged-line-format='' \
<(cut -c -32 md5sums.sort.old) \
<(cut -c -32 md5sums.sort.new) \
| ed md5sums.sort.old \
> files-removed
問題ed
は、ファイル全体をメモリにロードすることです。これは、多くのチェックサムがある場合に問題になる可能性があります。diff の出力を にパイプする代わりにed
、次のコマンドにパイプします。これにより、使用するメモリが大幅に削減されます。
diff … | (
lnum=0;
while read lprint; do
while [ $lnum -lt $lprint ]; do read line <&3; ((lnum++)); done;
echo $line;
done
) 3<md5sums.sort.XXX