두 디렉토리 트리의 차이점을 찾으려면 일반적으로 다음을 실행하십시오.
diff -r dir1/ dir2/
해당 파일 간의 차이점이 정확히 출력됩니다. 내용이 다른 해당 파일 목록을 얻는 데 관심이 있습니다. 나는 이것이 단순히 명령 줄 옵션을에 전달하는 문제라고 생각 diff
했지만 매뉴얼 페이지에서 아무것도 찾을 수 없었습니다.
어떤 제안?
dircmp
유닉스 (리눅스 아님)에서 명령 사용
두 디렉토리 트리의 차이점을 찾으려면 일반적으로 다음을 실행하십시오.
diff -r dir1/ dir2/
해당 파일 간의 차이점이 정확히 출력됩니다. 내용이 다른 해당 파일 목록을 얻는 데 관심이 있습니다. 나는 이것이 단순히 명령 줄 옵션을에 전달하는 문제라고 생각 diff
했지만 매뉴얼 페이지에서 아무것도 찾을 수 없었습니다.
어떤 제안?
dircmp
유닉스 (리눅스 아님)에서 명령 사용
답변:
당신은 리눅스를 말했다, 그래서 당신은 운이 좋다 (적어도 그것이 언제 추가되었는지는 확실하지 않다) :
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/
확장 된 버전diff -qr dir1/ dir2/ | grep ' differ'
--brief
바로 가기 로 만 변경 했습니다 -q
.
--brief
. 즉, 단일 옵션이 아닌 플래그 집합으로 -brief
해석됩니다 -b -r -i -e -f
.
내가 사용하는 명령은 다음과 같습니다.
diff -qr dir1/ dir2/
그것은 Mark의 것과 정확히 동일합니다 :) 그러나 그의 대답은 다른 유형 의 플래그를 사용하므로 나를 귀찮게 하고 두 번 보이게했습니다. Mark의 더 자세한 플래그를 사용하면 다음과 같습니다.
diff --brief --recursive dir1/ dir2/
다른 답변이 완벽하게 승인 된 경우 게시 해 주셔서 감사합니다. 스스로를 멈추지 못했습니다 ...
q
을 의미합니까? 무언가의 약어입니까? 난 뒤에 어떤 논리를 찾을 수 없습니다 q
..
q
입니다 quiet
. 일반적으로 덜 장황한 것을 의미합니다.
git diff --no-index dir1/ dir2/
색상 차이를 표시 할 수 있기 때문에 (git config에 해당 옵션이 설정된 경우) "less"를 사용하여 긴 페이지 출력에 모든 차이를 표시하기 때문에을 사용 하고 싶습니다 .
--no-index
에 더 stackoverflow.com/a/1792477/473390 . @ alan-porter 답변을 업데이트했습니다.
--name-status
명령 행에 추가 하면 수정 / 추가 / 삭제 상태에 대한 "M / A / D"플래그와 함께 파일 이름 목록 만 표시 된다는 것을 알았다 .
이 두 명령은 기본적으로 요청한 것을 수행합니다.
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 작업을 큰 청크로 그룹화하고 단일 드라이브에서 작업을 수행 할 때보다 효율적인 처리가 가능합니다.
rsync --options /usr /bin /var /sbin /lib /old_root
효과적으로 현재의 루트를 비교합니다 /
(그 안에있는 모든 하위 디렉토리를 지정하여)와 /old_root
(의 일부 오래된 백업 예를 들면 포함 /
뭔가입니다), diff -r
캔을 하지마 또한 크기, 권한 및 타임 스탬프가 동일한 파일이 변경되지 않았다고 가정하면 생략 --checksum
하면 파일이 변경되었을 수있는 매우 빠른 검사가 제공됩니다.
--delete
와 함께 rsync
?
--dry-run
플래그 사용) 아무 것도 실제로 삭제 rsync
되지 않으며 dir1에 있지만 dir2에없는 파일 만 인쇄합니다.
--dry-run
실수로 잊어 버리지 않도록 항상 먼저 배치하는 것이 좋습니다 .
Meld 는 또한 두 디렉토리를 비교할 수있는 훌륭한 도구입니다.
meld dir1/ dir2/
Meld에는 파일 또는 디렉토리를 비교할 수있는 많은 옵션이 있습니다. 두 파일이 다르면 파일 비교 모드로 들어가기 쉽고 정확한 차이점을 볼 수 있습니다.
meld
하지만 큰 디렉토리에 사용하면 끔찍 부진된다. 큰 디렉토리를 더 잘 처리하는 것이 있습니까?
find dir1 dir2 | cut -d/ -f2- | sort | uniq --unique
meld <(find dir1 -ls ) <(find dir2 -ls)
bash 프로세스 대체를 사용하여 꽤 잘 작동합니다. (zsh의 =(command)
작품이 훨씬 나아졌습니다.)
채널 노드 '청구서'(freenode / # centos fame)는 자신의 방법을 나와 공유했습니다.
diff -Naur dir1/ dir2
최종 디렉토리 슬래시를 포함하는 것은 중요하지 않습니다.
또한 -u
일부 이전 / 서버 버전의 diff에서는이 옵션을 사용할 수 없습니다.
diffs의 차이점 :
# 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
--new-file/-N
diff는 누락 된 파일이 비어있는 --text/-a
것으로 간주하고 모든 이진 입력을 텍스트로 간주합니다. 이 특정 사용 사례의 단점은 보이지 않습니다.
Diffoscope 는 훌륭한 명령 줄 기반 디렉토리 diff 도구입니다.
특히 파일 로 나눌 수 있다는 점이 마음에 듭니다 .
많은 종류의 아카이브를 재귀 적으로 풀고 다양한 이진 형식을보다 읽기 쉬운 형식으로 변환하여 비교합니다. 두 개의 타르볼, ISO 이미지 또는 PDF를 쉽게 비교할 수 있습니다.
어떤 파일이 다르고 어떻게 다른지 알려줍니다.
diff를 찾으려면 다음 명령을 사용하십시오.
diff -qr dir1/ dir2/
-r 은 모든 서브 디렉토리도 비교합니다. -q 는 파일이 다른 경우에만 diff에게보고하도록 지시합니다.
diff --brief dir1/ dir2/
--brief 는 디렉토리에 존재하는 파일을 보여줍니다.
그렇지 않으면
그래픽 창에 차이점을 쉽게 찾을 수있는 Meld를 사용할 수 있습니다.
meld dir1/ dir2/
--brief
과 -q
같은 옵션이 있습니다. 당신의 진술은 다른 것처럼 들리지만 다르지 않습니다.
당신은 할 수 있습니다 또한 사용 Rsync
하고 find
. 의 경우 find
:
find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER
그러나 이름과 하위 폴더는 동일하지만 내용이 다른 파일은 목록에 표시되지 않습니다.
GUI의 팬 이라면 @Alexander가 언급 한 Meld 를 확인할 수 있습니다 . 윈도우와 리눅스 모두에서 잘 작동합니다.