IT

두 개의 다른 디렉토리에 존재하는 Diff 파일

lottoking 2020. 3. 26. 08:29
반응형

두 개의 다른 디렉토리에 존재하는 Diff 파일


동일한 파일 목록을 가진 두 개의 디렉토리가 있습니다. diff명령을 사용하여 두 디렉토리에있는 모든 파일을 비교해야합니다 . 간단한 명령 줄 옵션이 있습니까? 아니면 파일 목록을 가져오고 반복하는 셸 스크립트를 작성해야합니까?


해당 diff명령을 사용할 수 있습니다 .

diff -bur folder1/ folder2/

이것은 통일 된 문맥으로 공백을 무시하는 재귀 diff를 출력합니다.

  • b 플래그는 공백을 무시하는 것을 의미합니다.
  • u 플래그는 통합 된 컨텍스트 (전후 3 줄)를 의미합니다.
  • r 플래그는 재귀를 의미

다른 파일 만 보려는 경우 다음을 사용할 수 있습니다.

diff -qr dir_one dir_two | sort

옵션 "q"는 내용은 다르지만 내용은 다르지만 다른 파일 만 표시하고 "정렬"은 출력을 사전 순으로 정렬합니다.


Diff는 그 옵션 -r가지고 있습니다.

diff -r dir1 dir2


diff두 파일을 비교할 수있을뿐만 아니라, -r옵션 을 사용하여 전체 디렉토리 트리를 탐색하여 하위 디렉토리와 각 트리의 비교 가능한 지점에서 발생하는 파일 간의 차이를 재귀 적으로 점검 할 수 있습니다.

$ man diff

...

-r  --recursive
        Recursively compare any subdirectories found.

...

GNU diff라면 두 디렉토리를 가리키고 -r 옵션을 사용할 수 있습니다.

그렇지 않으면, 사용해보십시오

for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done

NB 의견 섹션에서 Dennis가 지적한 것처럼 실제로 ls에서 명령 대체를 수행 할 필요는 없습니다. 나는이 작업을 너무 오랫동안 수행하여 자동 조종 장치 에서이 작업을 수행하고 비교를 위해 파일 목록을 가져와야하는 명령을 대체했습니다.

또한 ls의 별칭을 GNU ls에서 일시적으로 비활성화하여 GNU ls가 반환 한 목록에서 색상 형식 정보를 잃어 버리는 '\ ls'를 추가하는 것을 잊었습니다.


다음은 두 폴더의 파일 간 차이점을 보여주는 스크립트입니다. 재귀 적으로 작동합니다. dir1과 dir2를 변경하십시오.

(search() { for i in $1/*; do [ -f "$i" ] && (diff "$1/${i##*/}" "$2/${i##*/}" || echo "files: $1/${i##*/}   $2/${i##*/}"); [ -d "$i" ] && search "$1/${i##*/}" "$2/${i##*/}"; done }; search "dir1" "dir2" )

이 시도:

diff -rq /path/to/folder1 /path/to/folder2      

참고 URL : https://stackoverflow.com/questions/2019857/diff-files-present-in-two-different-directories

반응형