写真フォルダ(元のディレクトリ)があります。
写真をShotwellにインポートし、ShotwellはEXIFデータ(新しいディレクトリ/年/月/日)に基づいてディレクトリ構造にファイルをコピーしました。
元のディレクトリのすべてのファイルが新しいディレクトリ構造に正しくコピーされたことを再確認したいと思います。特に、サブディレクトリに関係なく、新しいフォルダにない元のフォルダのすべてのファイルのリストを作成したいと思います。理想的には、チェックサムやその他のコンテンツチェックが含まれます。
Linuxでこれを達成するための最良の方法は何ですか?
答え1
1つのアプローチは、あるディレクトリツリー内のすべてのファイルのmd5sumを1つのファイルに保存し、別のディレクトリツリー内のすべてのファイルのmd5sumを別のファイルに保存することです。次に、それらの間に違いがあることを確認してください。
それは次のとおりです。
#!/bin/sh
find dir1/ -type f -exec md5sum {} + | sort > dir1.md5
find dir2/ -type f -exec md5sum {} + | sort > dir2.md5
comm -3 <(cut -d ' ' -f 1 dir1.md5) <(cut -d ' ' -f 1 dir2.md5)
両方のファイルにないmd5sumのリストが出力されます(man comm
オプションを参照-3
)。印刷されたすべてのmd5sumは、たとえば、またはを使用してファイル内のファイル名を見つけるdir1.md5
ために使用できます。dir2.md5
grep
awk
しかし、わからない場合は、.md5ファイルにmd5sumとファイル名の両方を含める必要がありますが、ファイル名なしでmd5sum(.md5ファイルの最初の「フィールド」)のみを比較しようとします(パス/イベントmd5sumが次のようになるため)。同じですが、2つのファイル間でファイル名も常に異なります。したがって、プロセスcut
はに置き換えられますcomm
。
注:dir2にはあるがdir1にはないファイルのmd5sumは、1つのタブだけインデントされます。これは、特定のmd5sumが属するファイル(ディレクトリツリー)を知るのに役立ちます。これを使用して、dir1.md5の最初の列からファイル名を抽出し、dir2.md5の2番目の列からファイル名を取得できます。または、単に先行スペースを削除してくださいsed
。