En Linux uno puede usar el comando diff
para verificar las diferencias de archivos. Lo uso para verificar las diferencias entre dos módulos, ambos copiados /tmp
.
Sin embargo, ambos módulos tienen enlaces simbólicos, que pueden no estar apuntando al archivo correcto, ya que los módulos se han copiado en el /tmp
directorio. Pero esto no importa. Lo que quiero verificar es si los enlaces simbólicos son iguales.
Por ejemplo, en un módulo se lee el enlace simbólico
/home/test/file1
y en el otro el enlace simbólico dice:
/etc/rc.d/whatever
diff
ahora arroja un error porque, en general, no puede encontrar el archivo. Pero quiero dejar diff
decir: "Oye, esos enlaces simbólicos no son lo mismo", independientemente de si los enlaces apuntan a archivos válidos o no.
Pregunta: ¿Cómo es posible diff
hacer eso, es decir, no intentar seguir los enlaces, sino diferir los enlaces en sí?
Desde la versión 3.3, GNU diff no admite enlaces simbólicos sin referencia, pero luego compara las rutas a las que apuntan.
Instale GNU diffutils> = 3.3 y use la opción '--no-dereference'; No hay una opción corta para eso.
El diagnóstico será silencioso si las rutas son iguales o:
si los caminos difieren
fuente
Con herramientas GNU:
Estrictamente hablando, eso no puede diferenciar entre un enlace simbólico llamado a
a
que apuntab -> c
y unoa -> b
que llama a esoc
, sin mencionar los problemas con los nombres de archivo que contienen caracteres de nueva línea, pero eso hace que la salida sea más legible que la más robusta:Allí, usamos
//
como separador (que no puede ocurrir de otra manera en la salida defind
for%p
) y convertimos los caracteres de nueva línea en caracteres NUL (que no pueden ocurrir en la expansión de%p
ni%l
).fuente
Si entiendo correctamente, desea verificar que los enlaces simbólicos apuntan al mismo destino teórico, o que si uno no es un enlace simbólico, el otro archivo enlaza con el mismo archivo. Esto debería hacer lo que quieras:
fuente
-m
, no-f
. ¡Gracias!-m
./home/test/file1
es un enlace simbólico a/etc/rc.d/whatever
, o ambos son un enlace simbólico a/
, informaría que son lo mismo. Creo que el OP quiere ver la diferencia en la "ruta" almacenada en el enlace simbólico, no si se resuelven en el mismo archivo (para el que tiene[[ a -ef b ]]
).