Lista de enlaces simbólicos en el directorio actual?

8

Esta pregunta habla sobre la búsqueda de directorios en un directorio actual. La solución es básicamente:

ls -d */

Eso es genial, pero ¿cómo puedo enumerar fácilmente los enlaces simbólicos? ¿Tengo que usar algo como

find . -xtype l -d 1
(intended to find symlinks max depth 1 - doesn't work)

¿O hay una forma más fácil? ¿Se puede usar para esto?

cwd
fuente
En mi sistema Ubuntu, un vistazo rápido a sus man findprogramas que -des sinónimo de -depth(por compatibilidad con FreeBSD, NetBSD, MacOS X y OpenBSD), es decir. No es lo mismo que -maxdepth. . . -depth Procese el contenido de cada directorio antes que el directorio en sí mismo
Peter.O

Respuestas:

9

En zsh (agregue Ndentro de los paréntesis para incluir enlaces simbólicos cuyo nombre comience con a .):

echo *(@)

Con la mayoría de las findimplementaciones:

find -maxdepth 1 -type l

Compatible con POSIX:

find . -type d \! -name . -prune -o -type l -print

O con un bucle de shell:

for x in * .*; do
  if [ -h "$x" ]; then echo "$x"; done
done
Gilles 'SO- deja de ser malvado'
fuente
1
Para la -pruneopción, debe usar find topdir ! -name topdir -prune; de lo contrario, el directorio inicial también se ignora.
Arcege
6

Esto no está en una Mac, pero

find . -maxdepth 1 -type l

funciona para mi.

frogstarr78
fuente
3

Debería usar -typey no -xtype:

   -xtype c
          The same as -type unless the file is a symbolic link.  For  sym‐
          bolic  links:  if the -H or -P option was specified, true if the
          file is a link to a file of type c; if the -L  option  has  been
          given,  true  if  c is `l'.  In other words, for symbolic links,
          -xtype checks the type of the file that -type does not check.

El valor predeterminado es -P, por lo que la opción -xtype intentará determinar el archivo resultante, no el enlace simbólico en sí. En realidad, obtengo algunos resultados positivos, lo que parece un error. El -P -xtype ldebería devolver verdadero (en un enlace simbólico) si el resultante es en sí mismo un enlace simbólico.

También se puede usar: ls -FA | sed -ne 's/@//p'que mostrará solo los enlaces simbólicos.

Arcege
fuente
nice ls solution
frogstarr78
2
sed -ne 's/@//p'(e incluso sed -ne 's/@$//p') no es una prueba segura, ya que la primera versión dará un falso positivo cuando @ocurra en cualquier parte de la salida ls , y la segunda devolverá un falso positivo cuando un nombre de archivo realmente termine en@
Peter.O
1

Para descubrir solo los archivos que son enlaces simbólicos dentro del directorio actual:

find . -type l -printf '%p -> %l\n'

Esto enumerará recursivamente todos los archivos de enlaces simbólicos. Además, muestra los archivos reales a los que apunta.

bígaro1
fuente