저는 정기적으로 외장 하드 드라이브에 데이터를 백업하는데, 과거에는 일부 파일이 손상되어 너무 늦을 때까지 이를 인지하지 못했습니다. 그래서 이를 방지하기 위해 외장 하드 드라이브의 모든 파일에 대해 md5 체크섬을 생성하고 싶습니다. 이제는 시간이 지남에 따라 결국 새 파일이 추가될 수 있고 오래된 파일은 결국 삭제될 수 있습니다. 저는 현재 Linux Mint를 실행하고 있으며 다음 명령을 사용하여 외장 하드 드라이브에 있는 모든 파일의 md5 합계를 포함하는 텍스트 파일을 만들 수 있었습니다:
find '/path/to/backup/' -type f -exec md5sum {} \;>> /path/to/checksum.md5
이제 저는 이것을 오래 전에 웹사이트에서 얻었고 모든 것이 무엇을 의미하는지 잘 알지 못합니다. 누군가 명령의 각 부분이 무엇을 하는지 설명할 수 있다면 매우 감사하겠습니다. 즉, 위 명령은 항상 전체 하드 드라이브를 다시 해시하며, 하드 드라이브의 크기가 커질수록 완료하는 데 점점 더 오랜 시간이 걸립니다. 그래서 저는 전체 하드 드라이브를 다시 해싱할 필요 없이 하드 드라이브에 새 파일을 간단히 추가할 수 있는 방법을 찾고 싶었습니다. 과거에는 이 작업을 수행하기 위해 다음 명령을 사용했는데 최근까지 제대로 작동하는 것 같았습니다.
find 'path/to/backup' -type f -cnewer 'path/to/old/checksum/' -exec md5sum {} + > path/to/appended/checksum/
sort -k 2 -u /path/to/old/checksum path/to/appended/checksum > path/to/new/checksum.md5
어떤 이유로 새로 추가된 파일은 더 이상 위에서 찾을 수 없으며 첨부된 체크섬 파일에 항목이 없습니다. 이 문제를 해결하는 방법을 아는 사람이 있나요? 아니면 제가 하려는 일을 수행하는 더 좋은 방법이 있을까요?
find 명령을 사용하여 백업 디렉터리를 검색하고, md5 파일에 이미 있는 디렉터리를 무시하고, 마지막 체크섬 이후 추가된 파일만 표시하는 방법도 있습니까?
답변1
다음 매개변수가 -cnewer
문제일 수 있습니다.
find
-cnewer 다음에 지정된 파일 날짜보다 최신 파일을 찾아야 합니다.- 디렉토리를 넣은 것 같습니다. 따라서 첫 번째 부분은 다음과 같아야 합니다.
find 'path/to/backup' -type f -cnewer '/path/to/checksum.md5'
두 번째 부분은 exec
기능입니다.
당신 에게서 얻으십시오
man find
:-exec command {} ;
주문 실행(귀하의 경우:md5sum
) 여기서 문자열은{}
현재 파일 이름으로 대체됩니다. 일치하는 각 파일에 대해 지정된 명령이 한 번 실행됩니다.-exec command {} +
선택한 파일에 대해 지정된 명령을 실행하지만 명령줄은 선택한 각 파일 이름을 끝에 추가하여 구성됩니다. 명령의 총 호출 수는 일치하는 파일 수보다 훨씬 적습니다. 오류가 발생 하면find
즉시 종료되는 경우가 있으므로 보류 중인 일부 명령이 전혀 실행되지 않을 수도 있습니다.따라서 문제는 파일이 너무 많거나 동안
find
오류가 발생할 수 있습니다.
따라서 나는 다음을 권장합니다.
# Delete file /path/to/appended_checksum.md5 as we 'add' text to it.
rm /path/to/appended_checksum.md5
find 'path/to/backup' -type f -cnewer '/path/to/checksum.md5' -exec md5sum {} \;>> '/path/to/appended_checksum.md5'
sort -k 2 -u '/path/to/checksum.md5' '/path/to/appended_checksum.md5' > path/to/new_checksum.md5