Compare la propiedad y los permisos de todos los archivos en 2 directorios en bash

Compare la propiedad y los permisos de todos los archivos en 2 directorios en bash

Estoy intentando obtener la propiedad de los archivos y los permisos de todos los archivos en 2 directorios y compararlos. Informe de archivo con el mismo nombre pero propiedad o permiso de archivo diferente. Obtuve la propiedad de los archivos y el permiso de todos los archivos en el primer directorio para file1.txt y el segundo directorio para file2.txt.

El progreso de mi guión:

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

Me enfrento a desafíos al manejar estas 2 situaciones:

  1. Si falta un archivo en dir1 o dir2, se debe gestionar. Considere que los archivos en dir1 son archivos correctos y que los archivos en dir2 tienen permisos/propiedades en mal estado. Solo quiero comparar archivos que tienen el mismo nombre en dir1 y dir2 pero con diferente propiedad/permiso.

Respuesta1

Ejecución en seco para identificar diferencias

Esta línea de comando rsyncme funciona con árboles de directorios similares,

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

Acción

Elimine la opción npara obtener acción.


Debe modificar la línea de comando para que coincida con los directorios principales en su caso (posiblemente con una ruta remota a través de ssh). Hay dos v para aumentar la verbosidad y obtener resultados donde solo difieren los indicadores ejecutables; cuando actúe, lo solucionará sin indicadores de detalle.

información relacionada