여러 파일의 이름을 해당 내용의 MD5 합계로 바꾸는 방법은 무엇입니까?

여러 파일의 이름을 해당 내용의 MD5 합계로 바꾸는 방법은 무엇입니까?

일부 파일의 이름을 해당 내용의 MD5 합계로 바꾸고 싶습니다. 예를 들어 파일이 foo비어 있으면 이름을 d41d8cd98f00b204e9800998ecf8427e.

스크립트여야 합니까, 아니면 rename도구 같은 것을 사용할 수 있습니까?

답변1

Glenn의 답변은 훌륭합니다. 다중 문서가 개선되었습니다.

md5sum file1 file2 file3 | # or *.txt, or whatever
    while read -r sum filename; do
        mv -v "$filename" "$sum"
    done

파일이나 유사한 파일을 만드는 경우 find호출을 md5sum이와 유사한 것으로 바꿀 수 있습니다 find . <options> -print0 | xargs -0 md5sum(출력도 셸 루프로 파이프됩니다).

md5sum이것은 여러 줄과 합계, 해당 파일로 구성되고 각 줄을 읽고 파일 이름을 원래 이름에서 sum으로 바꾸는 명령을 실행하는 쉘 루프로 파이프되는 출력입니다 mv. 동일한 양의 파일은 덮어쓰게 됩니다. 그러나 이상한 일이 발생하지 않는 한(예: md5 해시 충돌을 처리하는 경우) 이는 해당 파일의 내용이 동일하므로 어쨌든 데이터가 손실되지 않는다는 것을 의미합니다. 각 파일에 추가 작업을 도입해야 하는 경우 원본 파일 이름과 MD5 합계가 각각 포함된 $filename및 변수를 참조하여 루프에 넣을 수 있습니다 .$sum

답변2

그리고 zsh:

autoload zmv # best in ~/.zshrc
zmv '**/*(#qD.)' '$(md5sum<$f)'

모든 일반 파일의 이름은 재귀적으로 변경됩니다.

(동일한 디렉터리에 있는 두 파일의 체크섬이 동일한 경우 파일 이름 바꾸기를 거부하므로 -f덮어쓰도록 추가하세요.)

**/*(#qD.)glob 한정자가 is 인 재귀 glob zsh(명시적 형식은 (#q<qualifiers>), D숨겨진 파일 포함, .선택만 가능)정기적인문서.

답변3

큰 타격:

md5sum my.file.here | { read sum filename; mv $filename $sum; }

관련 정보