
私は定期的に外付けハードドライブにデータをバックアップしましたが、過去には一部のファイルが破損して遅すぎるまでこれを認識できませんでした。したがって、これを防ぐために、外付けハードドライブ上のすべてのファイルに対してmd5チェックサムを作成したいと思います。これで、時間の経過とともに最終的に新しいファイルが追加され、古いファイルが最終的に削除される可能性があります。私は現在Linux Mintを実行しており、次のコマンドを使用して外付けハードドライブ上のすべてのファイルのmd5合計を含むテキストファイルを作成できました。
find '/path/to/backup/' -type f -exec md5sum {} \;>> /path/to/checksum.md5
今私はこれをずっと前にウェブサイトから得て、すべてが何を意味するのかよくわかりません。誰かが命令の各部分が何をしているのかを説明できればとても感謝します。つまり、上記のコマンドは常にハードドライブ全体を再ハッシュし、ハードドライブのサイズが大きくなるにつれて、完了するのに時間がかかります。だから私は、ハードドライブ全体を再ハッシュすることなく、ハードドライブに新しいファイルを簡単に追加する方法を見つけたかったのです。以前は、これを行うには次のコマンドを使用していましたが、最近まで正しく機能しているようです。
find 'path/to/backup' -type f -cnewer 'path/to/old/checksum/' -exec md5sum {} + > path/to/appended/checksum/
sort -k 2 -u /path/to/old/checksum path/to/appended/checksum > path/to/new/checksum.md5
何らかの理由で、新しく追加されたファイルは上記にはありません。添付されたチェックサムファイルにはエントリがありません。この問題を解決する方法を知っている人はいますか?それとも、私がやろうとしていることを行うより良い方法がありますか?
findコマンドを使用してバックアップディレクトリを検索し、md5ファイルにすでに存在するディレクトリを無視し、最後のチェックサム以降に追加されたファイルのみを表示する方法はありますか?
答え1
以下のパラメーターが-cnewer
問題である可能性があります。
find
-cnewerの後に指定されたファイルの日付よりも新しいファイルを見つける必要があります。- ディレクトリを入れたようです。したがって、最初の部分は次のようになります。
find 'path/to/backup' -type f -cnewer '/path/to/checksum.md5'
2番目の部分はexec
機能です。
あなたから得る
man find
:-exec command {} ;
注文の実行(あなたの場合:md5sum
) ここで文字列は{}
現在のファイル名に置き換えられます。一致するファイルごとに指定されたコマンドが一度実行されます。-exec command {} +
選択したファイルに対して指定されたコマンドを実行しますが、コマンドラインは選択した各ファイル名を最後に追加することで構成されます。コマンドの総呼び出し数は、一致するファイルの数よりはるかに少なくなります。エラーが発生するとfind
すぐに終了する可能性があるため、保留中の一部のコマンドがまったく実行されない可能性があります。したがって、問題はファイルが多すぎるか、
find
エラーが発生することがあります。
したがって、私は以下をお勧めします。
# Delete file /path/to/appended_checksum.md5 as we 'add' text to it.
rm /path/to/appended_checksum.md5
find 'path/to/backup' -type f -cnewer '/path/to/checksum.md5' -exec md5sum {} \;>> '/path/to/appended_checksum.md5'
sort -k 2 -u '/path/to/checksum.md5' '/path/to/appended_checksum.md5' > path/to/new_checksum.md5