以下を含むファイルのリストを生成したいと思います。
- 同じ名前
- 内容が異なります
ディレクトリ(すべてのサブディレクトリとコンテンツを含む)にあります。
どうすればいいですか?バッシュ、パール、何でも可能です。
したがって、同じ名前と内容を持つ2つのファイルを表示しないでください。
ベストアンサー1
更新:スクリプトのミスを修正しました。print $NF
次に変更されましたprint $3
。また、いくつかのことを整理し、いくつかの説明を追加しました。
仮説ファイル名前含まれていない\n
次は、中断されたソートリストを印刷します(例:部分制御割り込み)一意file name
、一意に対応md5sum
するファイルパスグループを表示します。
#!/bin/bash
# Choose which script to use for the final awk step
out_script=out_all
# Print all duplicated file names, even when md5sum is the same
out_all='{ if( p1 != $1 ) { print nl $1; print I $2 }
else if( p2 != $2 ) { print I $2 }
print I I $3; p1=$1; p2=$2; nl="\n" }
END { printf nl}'
# Print only duplicated file names which have multiple md5sums.
out_only='{ if( p1 != $1 ) { if( multi ) { print pend }
multi=0; pend=$1 "\n" I $2 "\n" }
else if( p2 != $2 ) { multi++; pend=pend I $2 "\n" }
pend=pend I I $3 "\n"; p1=$1; p2=$2 }
END { if( multi ) print pend }'
# The main pipeline
find "${1:-.}" -type f -name '*' | # awk for duplicate names
awk -F/ '{ if( name[$NF] ) { dname[$NF]++ }
name[$NF]=name[$NF] $0 "\n" }
END { for( d in dname ) { printf name[d] }
}' | # standard md5sum output
xargs -d'\n' md5sum | # " "==text, "*"==binary
sed 's/ [ *]/\x00/' | # prefix with file name
awk -F/ '{ print $3 "\x00" $0 }' | # sort by name. md5sum, path
sort | # awk to print result
awk -F"\x00" -v"I= " "${!out_script}"
出力表示ただファイル名はと同じです多くの種類 md5
S
afile.html
53232474d80cf50b606069a821374a0a
./test/afile.html
./test/dir.svn/afile.html
6b1b4b5b7aa12cdbcc72a16215990417
./test/dir.svn/dir.show/afile.html
出力表示みんな同じ名前のファイル。
afile.html
53232474d80cf50b606069a821374a0a
./test/afile.html
./test/dir.svn/afile.html
6b1b4b5b7aa12cdbcc72a16215990417
./test/dir.svn/dir.show/afile.html
fi le.html
53232474d80cf50b606069a821374a0a
./test/dir.svn/dir.show/fi le.html
./test/dir.svn/dir.svn/fi le.html
file.html
53232474d80cf50b606069a821374a0a
./test/dir.show/dir.show/file.html
./test/dir.show/dir.svn/file.html
file.svn
53232474d80cf50b606069a821374a0a
./test/dir.show/dir.show/file.svn
./test/dir.show/dir.svn/file.svn
./test/dir.svn/dir.show/file.svn
./test/dir.svn/dir.svn/file.svn
file.txt
53232474d80cf50b606069a821374a0a
./test/dir.show/dir.show/file.txt
./test/dir.show/dir.svn/file.txt
./test/dir.svn/dir.show/file.txt
./test/dir.svn/dir.svn/file.txt