파일 속성을 비교하는 Linux deep diff 도구가 있습니까?


17

diff와 같은 Linux 도구가 파일과 디렉토리를 재귀 적으로 비교하지만 확장 속성, acl, se 컨텍스트 비교도 추가합니까?


1
제공된 답변은 가끔 비교하는 데 효과적입니다. 그러나 소프트웨어를 테스트 할 때 이러한 유형의 비교를 한 시간에 여러 번 수행하기에는 적합하지 않습니다. 이러한 비교를 포함하도록 diff 소스 코드를 수정하려는 경향이 있습니다.
Michael Gantz

답변:


7

rsync -aHAX --delete기억하고 -n-i플래그 를 추가 하기 전에이 작업을 수행했습니다 .

이것은 약간 반 직관적이지만 나와 함께 견뎌야합니다. 기본 rsync명령은 두 디렉토리를 함께 동기화해야하는 것입니다. 그러나 -n -i동기화하지 않고 (즉, 드라이 런을 수행) 수행 한 작업과 이유를 인쇄하십시오. 파싱하는 것은 환상적이지 않지만 파일 이름을 쉽게 가져 와서 파이프로 만들 수 있습니다 ls.

이것은 mtimes, 날짜 등을 비롯하여 모든 장치 노드, 소켓, 명명 된 파이프 등을 따르지 않는 모든 것을 살펴볼 것입니다. 위의 명령 행은 ACL 및 확장 된 속성도 살펴 봅니다. 옵션을로 변경하여 rsync장치를 하나의 장치로 제한하고 -x소프트 및 하드 링크 동작 등 을 변경하여보고있는 것을 조정할 수 있습니다 .


2

야노스는 이미 무엇을해야하는지 말했다 :

find /a -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >a
find /b -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >b

diff -u a b

그리고 man 1 stat말합니다 :

%A     access rights in human readable form
%C     SELinux security context string
%F     file type
%g     group ID of owner
%u     user ID of owner
%s     total size, in bytes
%Y     time of last modification, seconds since Epoch
%n     file name

파일 내용을 비교하려면 다음을 사용할 수 있습니다.

find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-

as described here: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash

이 솔루션은 실행 가능한 솔루션을 제공하지 않습니다. 표시되는 diff는 컨텍스트가없고 읽기가 너무 어렵습니다. 파일 이름과 다른 점을 보여줄 수있는 것을 찾고 있습니다. 완전히 다른 짐승 인 두 발견에서 차이가 없습니다.
Michael Gantz

1
GNU find에는 GNU 의 기능이 stat내장되어 있으며 수십 년 전에 GNU 통계보다 앞서 있습니다. 또한 diffing 전에 출력을 정렬하고 싶을 것입니다. 그리고 당신은 필요한 (cd /a && find . ...)다른 모든 라인 때문에의 다릅니다 /a/b파일 경로에.
Stéphane Chazelas

0

다음은 확장 속성을 비교하기 위해 작성한 빠른 bash 스크립트입니다. 모든 파일 이름을 인쇄 한 다음 속성의 차이점을 인쇄합니다.

cd a
export relpath=[path/to/b/from/a]

for filename in $(find .);
do
    echo $filename;
    diff <(xattr -l $filename) <(xattr -l $relpath/$filename);
done

다른 답변에서 차용하여 다음 stat대신에 사용하도록 수정할 수 있습니다 xattr.

for filename in $(find .);
do
    echo $filename;
    diff <(stat -c '%A %C %F %g %u %s %Y' $filename) <(stat -c '%A %C %F %g %u %s %Y' $relpath/$filename);
done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.