![md5 해시를 사용하여 폴더 구조 다시 만들기](https://linux55.com/image/184131/md5%20%ED%95%B4%EC%8B%9C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8F%B4%EB%8D%94%20%EA%B5%AC%EC%A1%B0%20%EB%8B%A4%EC%8B%9C%20%EB%A7%8C%EB%93%A4%EA%B8%B0.png)
md5 체크섬의 긴 목록과 이러한 파일의 복사본(이름이 바뀌고 다른 폴더 구조에 있음)이 주어지면 원래 파일 시스템 구조를 다시 생성하거나 복원하는 방법은 무엇입니까? 해시 충돌이 없다고 가정합니다.
be70e389a9e000a85826a1a80488e1e1 path/A/2/2.bin
96a48d4706ec8eafff7e56f6784bb6b4 path/B/b1.bin
ffd2e58da118ba6c85de29c4c5b4c1f8 path/C/c1.bin
dbde0b664f88d8027e5cb7efb2cd1060 path/C/2/c2.bin
...```
답변1
만나요 bash
:
- 파일을 반복하고
read
각 해시를연관 배열 - 모든 로컬 파일 이름을 임시 파일에 저장합니다(
find
사용해도 괜찮습니다). - 각 파일에서 실행 중인 로컬 파일 목록을 반복하여
md5sum
해시 값이 배열에 키로 있는지 확인하고, 그렇다면 이름을 대상 이름으로 바꿉니다.
답변2
join
폴더를 복원하는 데 사용된 파일 이름에 공백 문자가 없다고 가정하고 빠르고 더러운 솔루션을 사용했습니다 .
md5sum * | sort -u -k 1,1 | join - ../restore.s | \
while read h r t; do \
mkdir -p $(dirname "tmp/$t"); cp "$r" "tmp/$t"; \
done
연결 입력을 정렬해야 하는데 동일한 파일을 삭제했습니다. 연결의 출력은 hash source target
파일을 복원하는 데 사용되는 행입니다.