Linux ext4에서 두 파일의 속성을 비교하는 방법

Linux ext4에서 두 파일의 속성을 비교하는 방법

물론 cmp(1)는 두 파일의 내용이 동일한지 알려 주지만 백업에서 복원을 테스트하기 위해 관련(!) 파일 속성도 비교하고 싶습니다.

그래서 내가 다음과 같은 간단한 일을 한다면

mv foo.bar foo.bar.save
deja-dup --restore foo.bar # or some other backup tool

foo.bar와 foo.bar.save의 속성을 비교하고 쉘 스크립트(또는 유사한 스크립트)에서 충분한 동등성을 테스트하려면 어떻게 해야 합니까? 저 할 수 있어요

stat foo.bar{,.save}

그리고 inode, atime 및 ctime(그리고 어떤 이유에서인지 링크 수)을 무시하는 것을 기억하면서 출력을 수동으로 확인하지만 이는 오류가 발생하기 쉽습니다. SELinux 및 기타 속성을 포함하는 cmp-with-attributes 도구가 있습니까? 이상적으로는 "모든" 시스템에서 Fedora 및 ext4 파일 시스템에서 실행되어야 합니다. Perl에서 뭔가를 변경해야 합니까?

(백업이 제대로 작동하는지 테스트하지 않으면 백업할 의미가 없습니다.)

답변1

getallattr() {
  [ -L "$1" ] || lsattr -d -- "$1" | sed 's/ .*//;q'
  getfattr -hdm- -- "$1" | tail -n +2 | sort
  stat -c '%u %g %a %s %x %y' -- "$1"
}

모든 속성을 검색합니다(적어도 쉽게 복원할 수 있는 속성). 내장된 것 stat보다는 zsh 또는 호환성의 GNU 구현을 가정합니다 . stat또한 콘텐츠 다이제스트/체크섬 형식을 포함할 수도 있습니다(예: sha1sum/b2sum...).

그럼 해

diff <(getallattr file1) <(getallattr file2)

(ksh, zsh, bash 구문).

관련 정보