我正在尝试获取 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)
我在处理这两种情况时面临挑战:
- 如果 dir1 或 dir2 中文件丢失,则应进行处理。考虑 dir1 中的文件是正确的文件,而 dir2 中的文件的权限/所有权混乱。我只想比较 dir1 和 dir2 中具有相同名称但所有权/权限不同的文件。
答案1
试运行以识别差异
这个命令行rsync
对我来说适用于类似的目录树,
rsync -Havvn --existing source/ target | grep -v uptodate$'
行动
n
删除获取操作的选项。
您必须调整命令行以匹配您的情况下的主目录(可能通过 ssh 使用远程路径)。有两个 v 可以增加详细程度并获得仅可执行标志不同的输出;当采取行动时,它会修复它而没有详细标志。