Tengo un script para crear enlaces simbólicos recursivos en mi directorio de inicio a mi directorio de configuración, para mantener los archivos bajo control de versión. Me gustaría omitir archivos que ya están enlazados a través de un directorio principal. Es decir, si tengo estos archivos / directorios:
~/foo/ -> ~/settings/foo/
~/settings/foo/
~/settings/foo/bar
, ¿cómo verifico que ~ / foo / bar y ~ / settings / foo / bar son el mismo archivo?
Editar : D'oh, otros minutos de búsqueda revelaron la respuesta :readlink -f $path
linux
symbolic-link
l0b0
fuente
fuente
stat -L
.Muchos shells tienen un
-ef
operador para eltest
builtin (o su sinónimo[
) para probar si dos rutas apuntan al mismo archivo existente (siguiendo enlaces simbólicos). Esto incluye bash, dash, pdksh, ksh88, ksh93 y zsh, pero no POSIX sh. En bash, ksh o zsh, también puede usar-ef
en la[[ … ]]
construcción condicional.fuente
-ef
tiene la ventaja de ser más portátil (también un poco más rápido, pero no para que lo notes la mayor parte del tiempo). Por ejemplo, funciona en * BSD, OSX, BusyBox, así como en Linux / Cygwin (GNU). También es más claro, ya que hace exactamente lo que se requiere. La única ventaja que puedo ver al llamarstat
es cuando no quieres seguir enlaces simbólicos.Para los enlaces suaves (creados con
ln -s
) puede usarrealpath
. Sin embargo, esto no funcionará para los enlaces duros.fuente