あるフォルダ内のすべてのファイルが別のフォルダにあることを確認する

あるフォルダ内のすべてのファイルが別のフォルダにあることを確認する

aデフォルトでは、複数のイメージを含むディレクトリがあります。さて、これらすべての画像がディレクトリにあることを確認したいと思いますb。要点は、多くのイメージがbサブディレクトリに直接存在するのではなく、bサブディレクトリ内にあることです。

また、ファイル名に依存せずにファイルの内容に依存したいと思います。

(bashタグのため:私はbashの答えを好みますが、他の言語でも別のプログラムを使用していても大丈夫です)

ベストアンサー1

内容別に比較したいので、ハッシュを利用した方が良いようです。

findこのコマンドを使用して、ディレクトリのファイルパスのリストを取得できます。この-type fオプションはすべてのディレクトリを無視し、通常ファイルの出力パスのみを無視します。このオプションは、見つかったパスを取得し、md5ハッシュリスト+ファイルパス( 'md5_hash /path/to/file')に変換する-exec md5sum {} \;コマンドに提供します。md5sum

cutこのリストをコマンドにパイプします。最初のオプションは、-f 1最初の列(ハッシュ値)のみを使用するように指示します。 2 番目は、列間-d ' 'の区切り文字として空白文字を使用するように指示します。デフォルトはタブです。

簡単にするために、対応するハッシュリストをソートコマンドにリンクしますdiff

演算子<( command )が呼び出されますプロセスの交換。コマンドの出力を取得し、それを入力として要求するコマンドの擬似ファイルに変換します(簡単な説明を見るにはリンクに従ってください)。これにより、diff2つのファイルを比較したいようです。

:~$ diff <(find folder1/ -type f -exec md5sum {} \; | cut -f 1 -d ' ' | sort) \
    <(find folder2/ -type f -exec md5sum {} \; | cut -f 1 -d ' ' | sort)

注:フォルダ1/とフォルダ2/を実際のフォルダに置き換えることを忘れないでください。

これにより、そのうちの1つにのみ存在するファイルのmd5ハッシュリストが表示されます。

実際に欠落しているファイルを知りたい場合は、次のことができます。

:~$ find folder1/ -type f -exec md5sum {} \; | sort | grep my_md5_hash

確認するファイルが多い場合は、<(find ...)次のように両方のコマンドの結果を保存して比較することをお勧めします。

:~$ diff list1.txt list2.txt
:~$ cat list1.txt | grep my_md5_hash

おすすめ記事