서버와 클라이언트 시스템 사이의 두 개의 큰 디렉토리를 비교하고 있습니다. 두 디렉터리가 동일한지 확인하기 위해 아래 명령과 유사한 명령을 실행합니다.
find /path/to/dir/ -type f -print0 | sort -z | xargs -0 sha1sum | sha1sum
그러나 서로 다른 경우 상위 디렉터리 아래의 모든 디렉터리와 파일에 대해 유사한 명령을 실행하려면 한 수준 아래로 내려가야 합니다. "for 루프"를 작성할 수 있지만 전체 디렉터리에 대한 체크섬을 계산하는 더 효율적인 방법이 있는지 알고 싶습니다. 이를 통해 서버/클라이언트 시스템 간의 비교를 더 쉽게 할 수 있습니다.
참고: 폴더의 개별 체크섬은 해당 디렉터리에 포함된 파일의 체크섬을 반영합니다.
나는 다음과 같은 것을 상상합니다.
$ checksumForDir /path/to/dir/*
/path/to/dir/a/ 18fad1ea8141fd1
/path/to/dir/b/ 17fad1ea8141fd1
/path/to/dir/c/ 94fad1ea8141fd1
지금까지 상위 디렉터리에서 체크섬 목록을 가져오는 한 줄의 코드를 작성했지만 디렉터리 이름을 병합할 수는 없습니다.
$ ls -d1 /parentDir/*/ | xargs -I {} sh -c 'find "{}" -type f -print0 | sort -z | xargs -0 sha1sum | sha1sum'
29ce013658a00862338ac848c2f90b2e18853a01 -
8f208342084950297b1376f669a9a3c93beca790 -
ae7f589d40f9222d1b06094d0c2f68649fb6cf08 -
답변1
제가 찾은 가장 좋은 방법은 다음 명령을 사용하는 것입니다.
$ ls -d1 /path/to/dir/*/ | xargs -I {} sh -c 'echo -n "{} " && find "{}" -type f -print0 | sort -z | xargs -0 sha1sum | sha1sum'
/path/to/dir/a/ 18fad1ea8141fd1 -
/path/to/dir/b/ 17fad1ea8141fd1 -
/path/to/dir/c/ 94fad1ea8141fd1 -
조금 복잡해 보이지만 아직 더 나은 방법을 찾지 못했습니다.