find ./ -type f -print0|xargs -0 md5sum |sort -k1,32|uniq -w32 -D
find "." -type f -printf "%i %p %s %t %M\n"
관련되지 않은 두 개의 스크립트가 있습니다. 연결을 시도했지만 아무 효과가 없었습니다.
답변1
이런 것을 처음으로 인쇄해 보세요
b1946ac92492d2347c6235b4d2611184 ./one/two/a.txt
b1946ac92492d2347c6235b4d2611184 ./some/c.txt
따라서 처음 34자를 계속 잘라서 한 줄에 하나의 경로를 남겨 둘 수 있습니다. GNU xargs가 있으면 이를 처리하고 xargs -d '\n'
실행할 수 있습니다. ls
또는 find
.
$ find ./ -type f -print0|xargs -0 md5sum |sort |uniq -w32 -D |cut -c35- |xargs -d '\n' ls -ld
-rw-r--r-- 1 me me 6 Apr 12 22:38 ./one/two/a.txt
-rw-r--r-- 1 me me 6 Apr 12 22:38 ./some/c.txt
$ find ./ -type f -print0|xargs -0 md5sum |sort |uniq -w32 -D |cut -c35- |xargs -I{} -d '\n' find {} -printf "%i %p %s %t %M\n"
1706523 ./one/two/a.txt 6 Mon Apr 12 22:38:18.6494036350 2021 -rw-r--r--
1710394 ./some/c.txt 6 Mon Apr 12 22:38:24.8373114680 2021 -rw-r--r--
( sort -k1,32
처음 32자가 아닌 첫 번째와 32번째 공백으로 구분된 필드를 기준으로 정렬됩니다. 해시 값은 문자열의 시작 부분에 있으므로 기본 정렬이 작동해야 합니다.)
파일 이름에 개행 문자가 포함되어 있으면 작동하지 않습니다 xargs -d '\n'
. 그러나 이것이 문제가 되면 더 많은 수정이 필요할 것입니다. 왜냐하면 md5sum
그러한 이름을 만나면 의 출력도 변경되기 때문입니다. 예를 들어 나는 얻는다
$ md5sum $'new\nline'
\b1946ac92492d2347c6235b4d2611184 new\nline
앞에 백슬래시가 있습니다.