해시를 사용하여 동일한 파일을 찾은 다음 해당 파일의 경로와 액세스 권한을 표시하려면 어떻게 해야 합니까?

해시를 사용하여 동일한 파일을 찾은 다음 해당 파일의 경로와 액세스 권한을 표시하려면 어떻게 해야 합니까?
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

앞에 백슬래시가 있습니다.

관련 정보