Para la versión 3.3 o posterior diff
, debe usar la --no-dereference
opción, como se describe en la respuesta de Pete Harlan .
Desafortunadamente, las versiones anteriores de diff
no admiten ignorar enlaces simbólicos :
Algunos archivos no son directorios ni archivos normales: son archivos inusuales como enlaces simbólicos, archivos especiales de dispositivos, canalizaciones con nombre y sockets. Actualmente, diff
trata los enlaces simbólicos como archivos normales; trata otros archivos especiales como archivos normales si se especifican en el nivel superior, pero simplemente informa su presencia al comparar directorios. Esto significa que patch
no puede representar cambios en dichos archivos. Por ejemplo, si cambia a qué archivo apunta un enlace simbólico, diff
genera la diferencia entre los dos archivos, en lugar del cambio al enlace simbólico.
diff
Opcionalmente, debe informar cambios a archivos especiales especialmente, y patch
debe extenderse para comprender estas extensiones.
Si todo lo que desea es verificar un rsync (y presumiblemente arreglar lo que falta), entonces puede ejecutar el comando rsync por segunda vez. Si no desea hacer eso, entonces la suma de verificación del directorio puede ser suficiente.
Si realmente desea hacer esto diff
, puede usar find
para omitir los enlaces simbólicos y ejecutar diff en cada archivo individualmente. Pasar los directorios de una y b como argumentos:
#!/bin/bash
# Skip files in $1 which are symlinks
for f in `find $1/* ! -type l`
do
# Suppress details of differences
diff -rq $f $2/${f##*/}
done
o como una línea:
for f in `find a/* ! -type l`;do diff -rq $f b/${f##*/};done
Esto identificará archivos que difieren en contenido, o archivos que están en a pero no en b .
Tenga en cuenta que:
- ya que estamos omitiendo enlaces simbólicos por completo, esto no se notará si los nombres de enlaces simbólicos no están presentes en b . Si lo necesita, necesitaría un segundo pase de búsqueda para identificar todos los enlaces simbólicos y luego verificar explícitamente su existencia en b .
- No se identificarán archivos adicionales en b , ya que la lista se construye a partir del contenido de a . Esto probablemente no sea un problema para su
rsync
escenario.