Elencare i collegamenti simbolici nella directory corrente?


8

Questa domanda parla della ricerca di directory in una directory corrente. La soluzione è sostanzialmente:

ls -d */

È fantastico, ma come posso elencare facilmente i symlink? Devo usare qualcosa del genere

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

O c'è un modo più semplice? Posso essere usato per questo?


Sul mio sistema Ubuntu, una rapida occhiata ai suoi man findspettacoli -dè sinonimo di -depth(per compatibilità con FreeBSD, NetBSD, MacOS X e OpenBSD.), Vale a dire. non è lo stesso di -maxdepth. . . -depth Elabora il contenuto di ogni directory prima della directory stessa
Peter.O

Risposte:


9

In zsh (aggiungi Ntra parentesi per includere i collegamenti simbolici il cui nome inizia con a .):

echo *(@)

Con la maggior parte delle findimplementazioni:

find -maxdepth 1 -type l

POSIX-compliant:

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

O con un loop shell:

for x in * .*; do
  if [ -h "$x" ]; then echo "$x"; done
done

1
Per l' -pruneopzione, è necessario utilizzare find topdir ! -name topdir -prune; altrimenti anche la directory di partenza viene ignorata.
Arcege,

6

Questo non è su un Mac, ma

find . -maxdepth 1 -type l

per me va bene.


3

Dovresti usare -typee non -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.

Il valore predefinito è -P, quindi l'opzione -xtype proverà a determinare il file risultante, non il link simbolico stesso. In realtà, ottengo alcuni risultati positivi, che sembrano un bug. L' -P -xtype ldovrebbe restituirla vera (su un link simbolico) se e solo se la risultante di per sé un collegamento simbolico è.

Può anche usare: ls -FA | sed -ne 's/@//p'che mostrerà solo i symlink.


bella soluzione ls
frogstarr78

2
sed -ne 's/@//p'(e anche sed -ne 's/@$//p') non è un test sicuro, poiché la prima versione darà un falso positivo quando si @verifica in qualsiasi punto dell'output ls , e la seconda restituirà un falso postivo quando un nome file termina effettivamente in@
Peter.O

1

Per scoprire solo i file che sono collegamenti simbolici all'interno della directory corrente:

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

Questo elencherà in modo ricorsivo tutti i file dei link simbolici. Inoltre, mostra i file effettivi a cui punta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.