Сравнить права собственности и разрешения всех файлов в 2 каталогах в bash

Сравнить права собственности и разрешения всех файлов в 2 каталогах в bash

Я пытаюсь получить права собственности и разрешения для всех файлов в 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 для увеличения детализации и получения вывода, в котором отличаются только флаги исполнения; при действии он исправит это без флагов детализации.

Связанный контент