Development Tip

두 개의 디렉토리 트리가 주어지면 어떤 파일이 다른지 어떻게 알 수 있습니까?

yourdevel 2020. 9. 29. 18:47
반응형

두 개의 디렉토리 트리가 주어지면 어떤 파일이 다른지 어떻게 알 수 있습니까?


두 디렉토리 트리의 차이점을 찾으려면 일반적으로 다음을 실행합니다.

diff -r dir1/ dir2/

이것은 해당 파일 간의 차이점을 정확히 출력합니다. 내용이 다른 해당 파일 목록을 얻는 데 관심이 있습니다. 나는 이것이 단순히 명령 줄 옵션을에 전달하는 문제라고 생각 diff했지만 man 페이지에서 아무것도 찾을 수 없었습니다.

어떤 제안?


Linux라고 말 했으므로 운이 좋습니다 (적어도 사용할 수 있어야하며 언제 추가되었는지 확실하지 않습니다).

diff --brief --recursive dir1/ dir2/ # GNU long options
diff -qr dir1/ dir2/ # common short options

필요한 일을해야합니다.

두 디렉토리에없는 파일의 차이점도 확인하려면 다음을 수행하십시오.

diff --brief --recursive --new-file dir1/ dir2/ # GNU long options
diff -qrN dir1/ dir2/ # common short options

내가 사용하는 명령은 다음과 같습니다.

diff -qr dir1/ dir2/

Mark의 대답과 똑같습니다 :) 그러나 그의 대답은 다른 유형 의 깃발을 사용하기 때문에 나를 괴롭 혔고 그것은 나를 두 번 보게 만들었습니다. Mark의 더 자세한 플래그를 사용하면 다음과 같습니다.

diff  --brief --recursive dir1/ dir2/

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


를 사용 git diff --no-index dir1/ dir2/하고 싶습니다 . 왜냐하면 색상의 차이를 표시 할 수 있기 때문입니다 (git 구성에 해당 옵션을 설정 한 경우). "less"를 사용하여 긴 페이지 출력의 모든 차이점을 보여주기 때문입니다.


이 두 명령은 기본적으로 요청 된 작업을 수행합니다.

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

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

둘 사이의 선택은 dir1과 dir2의 위치에 따라 다릅니다.

디렉터리가 두 개의 개별 드라이브에 있으면 diff가 rsync보다 성능이 뛰어납니다. 그러나 비교 된 두 디렉토리가 동일한 드라이브에 있으면 rsync가 더 빠릅니다. diff는 두 디렉터리에 병렬로 거의 동일한 부하를 가하여 두 드라이브의 부하를 최대화하기 때문입니다.

rsync는 실제로 비교하기 전에 큰 청크의 체크섬을 계산합니다. 이는 I / O 작업을 큰 청크로 그룹화하여 단일 드라이브에서 작업이 수행 될 때보다 효율적인 처리로 이어집니다.


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

meld dir1/ dir2/

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


채널 동포 'billings'(freenode / # centos 명성)가 나와 함께 방법을 공유했습니다.

diff -Naur dir1/ dir2

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

또한 -udiff의 일부 이전 / 서버 버전에서는이 옵션을 사용할 수 없습니다.

diff의 차이 :

# 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

Diffoscope 는 훌륭한 명령 줄 기반 디렉터리 비교 도구입니다.

특히 파일 비교할 수 있다는 점이 마음에 듭니다 .

여러 종류의 아카이브를 재귀 적으로 풀고 다양한 바이너리 형식을 사람이 읽을 수있는 형식으로 변환하여 비교합니다. 두 개의 tarball, ISO 이미지 또는 PDF를 쉽게 비교할 수 있습니다.

어떤 파일이 다른지뿐만 아니라 어떻게 다른지 알려줍니다.


diff를 찾으려면 다음 명령을 사용하십시오.

diff -qr dir1/ dir2/

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

diff  --brief dir1/ dir2/

--brief 는 디렉토리에 존재하지 않는 파일을 보여줍니다.

그렇지 않으면

we can use Meld which will show in graphical window its easy to find the difference.

meld  dir1/ dir2/

You can also use Rsync and find. For find:

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

But files with the same names and in the same subfolders, but with different content, will not be shown in the lists.

If you are a fan of GUI, you may check Meld that @Alexander mentioned. It works fine in both windows and linux.

참고URL : https://stackoverflow.com/questions/4997693/given-two-directory-trees-how-can-i-find-out-which-files-differ

반응형