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
-efoperador para eltestbuiltin (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-efen la[[ … ]]construcción condicional.fuente
-eftiene 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 llamarstates 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