답변:
diff 맨 페이지에서 :
-q
차이점에 대한 세부 정보가 아니라 파일이 다른지 여부 만보고하십시오.
-r
디렉토리를 비교할 때 발견 된 서브 디렉토리를 재귀 적으로 비교하십시오.
명령 예 :
diff -qr dir1 dir2
출력 예 (로케일에 따라 다름) :
$ ls dir1 dir2
dir1:
same-file different only-1
dir2:
same-file different only-2
$ diff -qr dir1 dir2
Files dir1/different and dir2/different differ
Only in dir1: only-1
Only in dir2: only-2
-x PATTERN
특정 하위 디렉토리를 제외하도록 명령에 포함시킬 수 있습니다 . 예를 들어 diff -qr repo1 repo2 -x ".git"
두 디렉토리를 비교하지만 파일 경로가 ".git"인 파일은 제외합니다.
rsync를 사용할 수도 있습니다
rsync -rv --size-only --dry-run /my/source/ /my/dest/ > diff.out
--size-only
크기는 동일하지만 내용이 다른 파일 (예 : old / version.txt "29a" new / version.txt "29b") 이 누락됩니다 . 대신 rsync -ric --dry-run old/ new/
"-i"인수를 사용하여 다음을 통해 파일 목록을 직접 얻을 수 있습니다.rsync -ric --dry-run old/ new/ | cut -d" " -f 2
하나의 디렉토리에만 있고 하위 디렉토리가 아닌 파일 이름 만있는 파일 목록을 얻으려면 다음을 수행하십시오.
diff -q /dir1 /dir2 | grep /dir1 | grep -E "^Only in*" | sed -n 's/[^:]*: //p'
전체 경로와 다른 모든 파일과 디렉토리를 재귀 적으로 나열하려면 다음을 수행하십시오.
diff -rq /dir1 /dir2 | grep -E "^Only in /dir1*" | sed -n 's/://p' | awk '{print $3"/"$4}'
이렇게하면 모든 파일에 다른 명령을 적용 할 수 있습니다.
예를 들어 dir1에는 있지만 dir2에는없는 모든 파일과 디렉토리를 제거 할 수 있습니다.
diff -rq /dir1 /dir2 | grep -E "^Only in /dir1*" | sed -n 's/://p' | awk '{print $3"/"$4}' xargs -I {} rm -r {}
내 리눅스 시스템 에서 파일 이름 만 얻으 십시오.
diff -q /dir1 /dir2|cut -f2 -d' '
audit-0.0.234/audit-data-warehouse-0.0.234/ audit-0.0.235/audit-data-warehouse-0.0.235/
diff -qrN /dir1 /dir2 | cut -f2 -d' '
나를 위해 잘 작동합니다!
실행 방법 diff -qr old/ new/
에는 한 가지 큰 단점이 있습니다. 새로 작성된 디렉토리의 파일이 누락 될 수 있습니다. 예를 들어 아래 예에서 파일 data/pages/playground/playground.txt
은 출력되지 않지만 diff -qr old/ new/
디렉토리 data/pages/playground/
는 ( 브라우저에서 playground.txt 를 검색 하여 빠르게 비교하십시오). 또한 Unix & Linux Stack Exchange에 다음 솔루션 을 게시 했지만 여기에서도 복사합니다.
프로그래밍 방식으로 새 파일 또는 수정 된 파일 목록을 만들려면 rsync , sort 및 uniq을 사용하는 것이 가장 좋습니다 .
(rsync -rcn --out-format="%n" old/ new/ && rsync -rcn --out-format="%n" new/ old/) | sort | uniq
이 예제를 통해 설명하겠습니다. 두 개의 dokuwiki 릴리스를 비교하여 어떤 파일이 변경되었고 어떤 파일이 새로 생성되었는지 확인하려고합니다.
우리은 wget과 타르를 가져오고 디렉토리에 압축을 풉니 old/
과 new/
:
wget http://download.dokuwiki.org/src/dokuwiki/dokuwiki-2014-09-29d.tgz
wget http://download.dokuwiki.org/src/dokuwiki/dokuwiki-2014-09-29.tgz
mkdir old && tar xzf dokuwiki-2014-09-29.tgz -C old --strip-components=1
mkdir new && tar xzf dokuwiki-2014-09-29d.tgz -C new --strip-components=1
rsync를 한 가지 방법으로 실행하면 rsync와 diff의 비교가 다음과 같이 새로 작성된 파일을 놓칠 수 있습니다.
rsync -rcn --out-format="%n" old/ new/
다음과 같은 출력을 생성합니다.
VERSION
doku.php
conf/mime.conf
inc/auth.php
inc/lang/no/lang.php
lib/plugins/acl/remote.php
lib/plugins/authplain/auth.php
lib/plugins/usermanager/admin.php
한 방향으로 만 rsync를 실행하면 새로 작성된 파일이 누락되고 다른 방법으로 삭제 된 파일이 누락되면 diff의 출력을 비교하십시오.
diff -qr old/ new/
다음과 같은 출력을 생성합니다.
Files old/VERSION and new/VERSION differ
Files old/conf/mime.conf and new/conf/mime.conf differ
Only in new/data/pages: playground
Files old/doku.php and new/doku.php differ
Files old/inc/auth.php and new/inc/auth.php differ
Files old/inc/lang/no/lang.php and new/inc/lang/no/lang.php differ
Files old/lib/plugins/acl/remote.php and new/lib/plugins/acl/remote.php differ
Files old/lib/plugins/authplain/auth.php and new/lib/plugins/authplain/auth.php differ
Files old/lib/plugins/usermanager/admin.php and new/lib/plugins/usermanager/admin.php differ
rsync를 양방향으로 실행하고 중복을 제거하기 위해 출력을 정렬하면 디렉토리 data/pages/playground/
와 파일 data/pages/playground/playground.txt
이 처음에 누락 되었음을 나타냅니다 .
(rsync -rcn --out-format="%n" old/ new/ && rsync -rcn --out-format="%n" new/ old/) | sort | uniq
다음과 같은 출력을 생성합니다.
VERSION
conf/mime.conf
data/pages/playground/
data/pages/playground/playground.txt
doku.php
inc/auth.php
inc/lang/no/lang.php
lib/plugins/acl/remote.php
lib/plugins/authplain/auth.php
lib/plugins/usermanager/admin.php
rsync
이러한 인수로 실행됩니다.
-r
"디렉토리로 재귀" -c
동일한 크기의 파일을 비교하고 "mod-time & size가 아닌 checksum을 기준으로 건너 뛰기"만 -n
"변경없이 시운전을 수행"--out-format="%n"
"지정된 FORMAT을 사용하여 업데이트 출력"(여기서 파일 이름 만 "% n"임)rsync
양방향 의 출력 (파일 목록)은 을 사용하여 결합 및 정렬 된 sort
다음이 정렬 된 목록은uniq
diff new/ old/
어떤 디렉토리가 삭제되었는지 확인하기 위해 뒤로 ( ) 실행할 수 없습니까?
diff -qr new/ old/
도쿠 위키의 타르와 위의 예에는 동일한 출력으로 생산 diff -qr old/ new/
- 즉, 당신이 디렉토리가 새로운 / 실종 아닌 파일임을 알
diff
-CentOS 7 의 매뉴얼 페이지는-q
"파일이 다를 때만보고"로 설명 합니다.