![如何在 Linux ext4 上比较两个文件的属性](https://linux22.com/image/25427/%E5%A6%82%E4%BD%95%E5%9C%A8%20Linux%20ext4%20%E4%B8%8A%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E5%B1%9E%E6%80%A7.png)
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 语法)。