比较 bash 中 2 个目录中所有文件的所有权和权限

比较 bash 中 2 个目录中所有文件的所有权和权限

我正在尝试获取 2 个目录中所有文件的文件所有权和权限并进行比较。具有相同名称但不同文件所有权或权限的报告文件。我已将第一个目录中所有文件的文件所有权和权限提取到 file1.txt 并将第二个目录中的所有文件提取到 file2.txt

我的脚本进度:

[root@test]# cat file1.txt
644 root root /home/user2/sample-test/abc
644 root root /home/user2/sample-test/bcd
644 root root /home/user2/sample-test/efg
644 root root /home/user2/sample-test/mama
644 root root /home/user2/sample-test/ngins2
644 root root /home/user2/sample-test/nils45
644 root root /home/user2/sample-test/sample2
644 root root /home/user2/sample-test/t1
644 root root /home/user2/sample-test/t2
644 root root /home/user2/sample-test/test1
755 root root /home/user2/sample-test
644 root root /home/user2/sample-test1/abc
644 root root /home/user2/sample-test1/ppp
644 root root /home/user2/sample-test1/werwre
755 root root /home/user2/sample-test1
644 root root /home/user2/testing123

[root@test]# cat file2.txt
644 root root /home/user2/sample-test/ip
644 root root /home/user2/sample-test/new-file
644 root root /home/user2/sample-test/ngins2
644 root root /home/user2/sample-test/nils45
644 root root /home/user2/sample-test/sample2
755 root root /home/user2/sample-test
755 root root /home/user2/sample-test/test1.sh
644 apache apache /home/user2/sample-test1/ppp
644 apache fes /home/user2/sample-test1/abc
644 root root /home/user2/sample-test1/perms.saved
644 root root /home/user2/sample-test1/test
644 root root /home/user2/sample-test1/test1
644 root root /home/user2/sample-test1/werwre
755 root root /home/user2/sample-test1
755 root root /home/user2/sample-test1/1.sh
644 root root /home/user2/testing123


find /path/to/dir1 -depth -exec stat --format '%a %U %G %n' {} + | sort -n" >> file1.txt
find /path/to/dir2 -depth -exec stat --format '%a %U %G %n' {} + | sort -n" >> file2.txt

t1=`cat file1.txt`
t5=`cat file2.txt`

#find lines only in file1
only1=$(comm -23 "$t1"_sorted "$t5"_sorted)

#find lines only in file2
only2=$(comm -13 "$t1"_sorted "$t5"_sorted)

我在处理这两种情况时面临挑战:

  1. 如果 dir1 或 dir2 中文件丢失,则应进行处理。考虑 dir1 中的文件是正确的文件,而 dir2 中的文件的权限/所有权混乱。我只想比较 dir1 和 dir2 中具有相同名称但所有权/权限不同的文件。

答案1

试运行以识别差异

这个命令行rsync对我来说适用于类似的目录树,

rsync -Havvn --existing source/ target | grep -v uptodate$'

行动

n删除获取操作的选项。


您必须调整命令行以匹配您的情况下的主目录(可能通过 ssh 使用远程路径)。有两个 v 可以增加详细程度并获得仅可执行标志不同的输出;当采取行动时,它会修复它而没有详细标志。

相关内容