programing

2개의 디렉토리 트리를 지정하면 콘텐츠에 따라 어떤 파일이 다른지 어떻게 알 수 있습니까?

codeshow 2023. 4. 12. 22:42
반응형

2개의 디렉토리 트리를 지정하면 콘텐츠에 따라 어떤 파일이 다른지 어떻게 알 수 있습니까?

2개의 디렉토리 트리의 차이를 찾으려면 보통 다음과 같이 실행합니다.

diff -r dir1/ dir2/

이것에 의해, 대응하는 파일간의 차이가 정확하게 출력됩니다.내용이 다른 해당 파일 목록을 받고 싶습니다.이것은 단순히 명령어라인 옵션을 전달하기 위한 문제라고 생각했습니다.diffman 페이지에서는 아무것도 찾을 수 없었습니다.

좋은 의견이라도 있나?

시험:

diff --brief --recursive dir1/ dir2/

또는 짧은 플래그를 사용하여-qr:

diff -qr dir1/ dir2/

어느 디렉토리에도 없는 파일의 차이를 표시하는 경우는, 다음의 순서에 따릅니다.

diff --brief --recursive --new-file dir1/ dir2/  # with long options
diff -qrN dir1/ dir2/                            # with short flag aliases

사용하는 명령어는 다음과 같습니다.

diff -qr dir1/ dir2/

마크의 답변과 똑같습니다.다만, 다른 타입의 플래그를 사용하고 있기 때문에, 그의 답변이 마음에 걸려, 다시 한 번 생각하게 되었습니다.Mark의 보다 상세한 플래그를 사용하면 다음과 같습니다.

diff  --brief --recursive dir1/ dir2/

다른 답변이 완벽하게 받아들여질 때 게시한 것에 대해 사과드립니다.내 자신을 멈출 수 없었다...덜 현학적이어야 한다고요

사용하는 것을 좋아합니다.git diff --no-index dir1/ dir2/색상의 차이(git config에 옵션이 설정되어 있는 경우)와 긴 페이지 출력의 모든 차이점을 "less"로 표시하기 때문입니다.

사용.rsync:

rsync --dry-run --recursive --delete --links --checksum --verbose /dir1/ /dir2/ > dirdiff_2.txt

또는,diff:

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

기능적으로는 동일하지만 퍼포먼스는 다음 조건에 따라 다를 수 있습니다.

  • 디렉토리가 같은 드라이브에 있는 경우는, rsync 가 고속입니다.
  • 디렉토리가 2개의 다른 드라이브에 있는 경우는, diff 가 고속입니다.

이는 diff가 두 디렉토리에 병렬로 거의 동일한 부하를 가하기 때문에 두 드라이브에 대한 부하가 극대화되기 때문입니다.rsync는 체크섬을 실제로 비교하기 전에 큰 청크로 계산합니다.이를 통해 I/O 작업을 대규모 청크로 그룹화하고 단일 드라이브에서 작업을 수행할 때 보다 효율적으로 처리할 수 있습니다.

또한 Meld는 두 개의 디렉토리를 비교하기 위한 훌륭한 도구입니다.

meld dir1/ dir2/

Meld에는 파일 또는 디렉토리를 비교하는 옵션이 많이 있습니다.두 파일이 다를 경우 파일 비교 모드로 들어가 정확한 차이를 확인할 수 있습니다.

채널 동포의 'billing'(프리노드/#centos의 유명 인사)이 그의 방법을 공유했습니다.

diff -Naur dir1/ dir2

최종 디렉토리 전송 슬래시를 포함하는 것은 중요하지 않습니다.

「 」, 「 」, 「 」, 「 」, 「 」-u일부 이전 버전 또는 서버 버전에서는 옵션을 사용할 수 없습니다.

차이의 차이:

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST

# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ

diff를 찾으려면 다음 명령을 사용합니다.

diff -qr dir1/ dir2/

-r은 모든 서브디렉토리를 diff합니다.-q는 파일이 다를 때만 diff를 보고하도록 지시합니다.

diff  --brief dir1/ dir2/

--domains는 디렉토리에 존재하는 파일을 표시합니다.

그렇지 않으면

우리는 Meld를 사용할 수 있는데, 이것은 그래픽 창에 나타나기 때문에 차이를 쉽게 찾을 수 있습니다.

meld  dir1/ dir2/

Diffoscope는 훌륭한 명령줄 기반의 디렉토리 diff 도구입니다.

특히 파일로 분산될 수 있다는 점이 마음에 듭니다.

여러 종류의 아카이브를 반복적으로 언팩하고 다양한 바이너리 포맷을 사람이 읽을 수 있는 형태로 변환하여 비교합니다.두 개의 타르볼, ISO 이미지 또는 PDF를 쉽게 비교할 수 있습니다.

어떤 파일이 다른지 뿐만 아니라 어떻게 다른지도 알 수 있습니다.

를 사용할 수도 있습니다.Rsync ★★★★★★★★★★★★★★★★★」find ★★★★의 find:

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

그러나 이름이 같고 하위 폴더에 있지만 내용이 다른 파일은 목록에 표시되지 않습니다.

GUI의 팬이라면 @Alexander가 말한 Meld를 체크해 주세요.Windows에서도 Linux에서도 정상적으로 동작합니다.

dirA와 dirB의 차이를 보고하는 동시에 업데이트/동기화하려면:

rsync -auv <dirA> <dirB>

언급URL : https://stackoverflow.com/questions/4997693/given-two-directory-trees-how-can-i-find-out-which-files-differ-by-content

반응형