同じ中身のファイルはどれ?

ディレクトリ構成やファイル名が同じの2つのディレクトリ間で、中身が同じファイルの名前をリストアップするやり方。 中身が違うファイルだとdiff -rで簡単なのですが、同じ物のリストアップは意外と???でした。 私の場合は2つのディレクトリのファイル名をそれぞれdiffで比較し、diffコマンドの終了ステータスを利用したやり方を出しました。 いろんなリプライがあり、知見がありました。findの-execを利用したやり方、fdupesというコマンドの存在、diffコマンドの-sオプション、ハッシュをとって重複チェックなどなど。
5
ぱぴろんちゃん😱🙀 @papiron

二つのディレクトリDIR1とDIR2内で同じファイルをリストアップしようと思ったら、こんな感じにするしかないかな?ファイルパスに空白とかが無い前提。 $ paste <(find DIR1 -type f | sort) <(find DIR2 -type f | sort) | while read a b; do diff -q $a $b > /dev/null && echo $a $b; done

2019-01-18 14:54:38
ぱぴろんちゃん😱🙀 @papiron

DIR1とDIR2ともに、ディレクトリやファイルの名前や構成は同じです。ファイルの中身だけが一部違う状態。

2019-01-18 14:55:55
ふみやす@元シェルまおう(自称でない) @satoh_fumiyasu

(cd DIR1 && find -type f -exec sh 'for f in "$@"; do diff -q -- "$f" "../DIR2/$f" >/dev/null && printf '%s\n' "$f"; done' sh {} +) 自分ならこんなふうにするかなぁ。ファイル名は任意でも大丈夫なはず。 #シェル芸 twitter.com/papiron/status…

2019-01-18 16:08:35
eban @eban

@papiron fdupesってコマンドがあるので、これをインストールするのが簡単

2019-01-18 16:22:14
ぱぴろんちゃん😱🙀 @papiron

ディレクトリ構成やファイルの名前が同じ2つのディレクトリ間で、ファイルの中身が同じファイル一覧を取得するやり方、いろんなリプライがあって知見がありましたね。違うファイルの場合はdiff -rでええんですが、同じものの一覧ってのが意外と???だったので。

2019-01-18 17:08:52
ぱぴろんちゃん😱🙀 @papiron

@crazyhacks68k -sオプションってのがあったんですね!ちゃんとマニュアル読まなきゃ。

2019-01-18 17:14:41
Blacknon @blacknon_

-sで同一かどうかが出せるから、grepで同一のものだけを出してファイル名だけ抽出すればいけそう??

2019-01-18 17:15:01
ぱぴろんちゃん😱🙀 @papiron

diffコマンドのマニュアルを改めて確認してみると、色んなオプションがあるのね。-sオプション知らなんだ。

2019-01-18 17:20:15
ペンギン使いの初級魔術師 @neunetneucom

全部ハッシュ取って、sortで並び替えてからuniqするとか? twitter.com/papiron/status…

2019-01-18 20:18:42
ぱぴろんちゃん😱🙀 @papiron

2つのディレクトリ(ディレクトリ構造やファイル名が同じ)で、同じ中身のファイルをリストアップするやり方についてまとめてみました。 同じ中身のファイルはどれ? - Togetter togetter.com/li/1310058 @togetter_jpさんから

2019-01-18 18:14:23
ぱぴろんちゃん😱🙀 @papiron

@neunetneucom パスに空白が無い場合なら、これでも出来ました!ありがとうございます。 $ cat <(find DIR1 -type f) <(find DIR2 -type f) | xargs md5sum | sort | awk '{print $2,$1}' | uniq -f 1 -d

2019-01-18 20:44:37