본문 바로가기
Programming/C++

폴더 내 파일 일치 여부 확인하기. md5sum, find 명령어 조합

by AUTORI 2022. 11. 19.

폴더 내 특정 확장자 및 이름을 가진 파일들이 같은 파일인지 아닌지 확인이 필요했다. 파일을 하나하나 다 찾아서 md5sum 으로 checksum 확인하여 무결성 여부를 확인하기엔 너무 시간이 오래 걸렸다. 여기저기 찾아본 결과 아래 명령어와 같이 md5sum 명령어와 find 명령어 조합으로 파일 동일 여부를 확인할 수 있었다.

 

 

1. find 결과 값을 xargs 와 md5sum 조합하여 확인하는 방법

 

sudo find ./ -maxdepth 3 -name "*.txt" -print0 | sort -z | xargs -r0 md5sum

결과 :
ae35fa407b6b1fa855fa0ad93d7c72bf  ./A/A_1/test.txt
ae35fa407b6b1fa855fa0ad93d7c72bf  ./A/test.txt
ae35fa407b6b1fa855fa0ad93d7c72bf  ./test.txt

 

명령어 설명 :

 

sudo 최고 관리자 권한으로 실행
find ./ 현재 위치 ./  에서 찾기 시작
-maxdepth 3 현재 위치를 maxdepth 1로 보고,  3 번째 하위 폴더까지 검색한다
-name *.txt 확장자가 txt 인 모든 파일 검색
-print0 각각의 파일 검색 결과를 newline(개행) 없이 한줄로 보여준다.
sort -z GNU 환경에서 -print0 옵션 대신 사용 가능한 명령어
xargs -r0 md5sum 각각의 결과를 md5sum 명령어 수행한다.
-r(--no-run-if-empty) : 입력값이  비어있으면 수행하지 않는다.
-0(--null) : 파일 이름은 null character로 끝나도록 인식한다.

 

 

 

2.  find 결과 값을 backtick(`) 을 사용하여 md5sum 확인 하는 방법

 

md5sum `sudo find ./ -maxdepth 3 -name "*.txt"`

결과 :
ae35fa407b6b1fa855fa0ad93d7c72bf  ./test.txt
ae35fa407b6b1fa855fa0ad93d7c72bf  ./A/A_1/test.txt
ae35fa407b6b1fa855fa0ad93d7c72bf  ./A/test.txt

 

 

명령어 설명 :

md5sum Backtick으로 감싸진 find 명령 결과를 변수로 출력 받아 md5sum 를 수행한다.
Backtick ( ` ) ` ` 안에 명령어를 수행 후 출력한다.

 

 

<참고 자료>

https://unix.stackexchange.com/questions/34325/sorting-the-output-of-find-print0-by-piping-to-the-sort-command
https://ss64.com/bash/sort.html

https://www.gnu.org/software/findutils/manual/html_node/find_html/xargs-options.html

https://cs.kangwon.ac.kr/~leeck/IR/bash.pdf

댓글