Puedo verificar, si existe un archivo y es un enlace simbólico con -L
for file in *; do
if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi
done
y si es un directorio con -d:
for file in *; do
if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a regular file"; fi
done
Pero, ¿cómo puedo probar solo los enlaces a directorios?
Simulé todos los casos en una carpeta de prueba:
/tmp/test# ls
a b c/ d@ e@ f@
/tmp/test# file *
a: ASCII text
b: ASCII text
c: directory
d: symbolic link to `c'
e: symbolic link to `a'
f: broken symbolic link to `nofile'
shopt -s dotglob
[[
, y lo tomé como el punto de partida lógico. Una discusión sobre los méritos de[
vs[[
está fuera del alcance de esta respuesta (pero disponible aquí ).Aquí hay un comando único que enumerará recíprocamente enlaces simbólicos cuyo objetivo es un directorio (comenzando en el directorio actual):
find . -type l -xtype d
Referencia: http://www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories
fuente
Una solución con
find
y usando una función:fuente
find
ywhile read
para eso es un poco excesivo ...