如何在 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 的属性并在 shell 脚本(或类似脚本)中测试是否足够相等。我可以

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"
}

检索所有属性(至少是那些可以轻松恢复的属性)。它假定 zsh 的 GNU 实现stat或兼容,而不是stat内置的。您还可以在其中包含某种形式的内容摘要/校验和(例如 sha1sum/b2sum...)。

然后做

diff <(getallattr file1) <(getallattr file2)

(ksh、zsh、bash 语法)。

相关内容