Compare a propriedade e as permissões de todos os arquivos em 2 diretórios no bash

Compare a propriedade e as permissões de todos os arquivos em 2 diretórios no bash

Estou tentando buscar a propriedade e as permissões de todos os arquivos em 2 diretórios e compará-los. Arquivo de relatório com o mesmo nome, mas com propriedade ou permissão de arquivo diferente. Busquei a propriedade e a permissão de todos os arquivos no primeiro diretório para arquivo1.txt e no segundo diretório para arquivo2.txt

Progresso do meu script:

[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)

Estou enfrentando desafios ao lidar com estas 2 situações:

  1. Se o arquivo estiver faltando em dir1 ou dir2 deve ser tratado. Considere que os arquivos no dir1 são arquivos corretos e os arquivos no dir2 estão com permissões/propriedades confusas. Eu só quero comparar arquivos que tenham o mesmo nome em dir1 e dir2, mas com propriedade/permissão diferentes.

Responder1

Teste para identificar diferenças

Esta linha de comando rsyncfunciona para mim com árvores de diretórios semelhantes,

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

Ação

Remova a opção nde entrar em ação.


Você deve ajustar a linha de comando para corresponder aos diretórios principais do seu caso (possivelmente com caminho remoto via ssh). Existem dois v's para aumentar o detalhamento e obter resultados onde apenas os sinalizadores executáveis ​​diferem; quando a ação for corrigida sem sinalizadores de verbosidade.

informação relacionada