Come elencare tutti i collegamenti simbolici in una directory


145

Ho un link simbolico nella mia /var/www/directory che collega a WordPress. Quando eseguo il comando ls -ladalla /var/www/directory, il collegamento a WordPress non viene visualizzato. C'è un modo per elencare tutti i collegamenti simbolici che si trovano in una directory?


Risposte:


80

È possibile utilizzare grepcon il lscomando per elencare tutti i collegamenti simbolici presenti nella directory corrente.

Questo elencherà tutti i collegamenti presenti nella directory corrente.

ls -la /var/www/ | grep "\->"

5
Restituirà falso positivo se si dispone di un file contenente " ->". Prova un semplicetouch "foo->"
Sylvain Pineau,

7
per favore non copiare e incollare il contenuto di un'altra risposta alla tua risposta. -1
αғsнιη

3
perché non greping ^l?
Eliran Malka, il

3
Come al solito, la risposta migliore è quella con il più alto +
FractalSpace il

Bello! → .bash_alias: Cool alias listlinks='ls -l --color | grep "\->"')
Frank Nocke,

285

L'analisi lsè una Bad Idea ® , findin questo caso preferisci una semplice :

find . -type l -ls

Per elaborare solo la directory corrente:

find . -maxdepth 1 -type l -ls

Riconoscimenti: come posso fare in modo che la shell riconosca i nomi dei file restituiti da un comando `ls -A` e questi nomi contengano spazi?


find: Unknown argument to -type: 1
ahnbizcad,

15
@ahnbizcad: non è 1(uno) ma l(collegamento)
Sylvain Pineau,

3
Bella risposta! Ho adattato il mio per non scendere in questo modo: find /<your_directory> -maxdepth 1 -type l -ls 2>/dev/null Grazie!
bg,

3
Solo per la directory corrente (cioè non ricorsiva ) aggiungere -maxdepth 1.
Joshua Pinter

1
@ cig0 non hai bisogno di usare awk, probabilmente vuoi proprio questo:find . -maxdepth 1 -type l | sort -n
sobi3ch

10

il ls -lacomando mostra tutti i file e le cartelle e anche la directory simbolica collegata, se questo comando non mostra alcuna directory simbolica significa che non hai un link simbolico a WordPress .

vedere il risultato della corsa ls -la:

kasiya@kasiya-pc:~$ cd /sys/devices/platform/sony-laptop
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la
total 0
drwxr-xr-x  3 root root    0 Sep  9 19:57 .
drwxr-xr-x 14 root root    0 Sep 10  2014 ..
-r--r--r--  1 root root 4096 Sep  9 22:32 battery_care_health
-rw-r--r--  1 root root 4096 Sep  9 22:32 battery_care_limiter
lrwxrwxrwx  1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
-r--r--r--  1 root root 4096 Sep  9 22:32 modalias
drwxr-xr-x  2 root root    0 Sep  9 22:32 power
lrwxrwxrwx  1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
-rw-r--r--  1 root root 4096 Sep  9 22:32 touchpad
-rw-r--r--  1 root root 4096 Sep  9 19:57 uevent

Vedrai che tutte le directory simboliche hanno i lpermessi per chiedere le bandiere dei permessi. e se prendi un grep con ^lpuoi elencare solo i file simbolici o la directory:

kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ ls -la |grep ^l
lrwxrwxrwx 1 root root    0 Sep  9 19:57 driver -> ../../../bus/platform/drivers/sony-laptop
lrwxrwxrwx 1 root root    0 Sep  9 22:32 subsystem -> ../../../bus/platform
kasiya@kasiya-pc:/sys/devices/platform/sony-laptop$ 

la directory del driver e del sottosistema sono collegamenti simbolici ad altre directory qui.


1
Specifiche minori qui ... il primo carattere della stringa di autorizzazioni non è in realtà un'autorizzazione. È il tipo di file. Come hai detto, lsignifica che è un collegamento simbolico.
conner.xyz,

5

grep È tuo amico:

ls -lhaF | grep ^l   # list links
ls -lhaF | grep ^d   # list directories
ls -lhaF | grep ^-   # list files

Questo elencherà le righe che iniziano con "l" che rappresentano i collegamenti nella colonna permanente al posto ldell'uso dper le directory e -per i file



1

Per visualizzare i collegamenti simbolici in una directory:

  1. Apri un terminale e passa a quella directory.

  2. Digita il comando:

    ls -la
    

    Questo deve elencare a lungo tutti i file nella directory anche se sono nascosti.

  3. I file che iniziano con lsono i tuoi file di link simbolici.


1
-1: la risposta di KasiyA copre già questo.
Muru,

1

Ciò restituisce tutti gli elementi simbolicamente collegati (sia dirs che fns) in una directory:

find . -maxdepth 1 -type l -print | cut -c3- | grep -v "\#"

Tuttavia, al fine di distinguere tra i tipi di elementi reali collegati simbolicamente:

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep -v "/" | cut -d' ' -f1

Restituisce solo gli elementi del nome file collegati simbolicamente. E,

ls -lhaF | grep ^l | grep -v "\#" | cut -c42- | grep "/" | cut -d' ' -f1

Restituisce solo elementi con nome simbolico collegati.


0

Digita ls -lai, elencherà tutti i file e le sottodirectory con i corrispondenti numeri di inode. Sai che i file con lo stesso numero di inode sono i collegamenti (hard o soft) e questa soluzione funziona anche per i collegamenti simbolici.


ls -lainon senza mostrare lo stesso numero di inode di un file ed i suoi collegamenti simbolici. A differenza dei collegamenti reali, i collegamenti simbolici hanno le loro voci di inode separate. Questo è quello che sembra.
Eliah Kagan,

0

Può essere fatto anche con Python:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /path/to/dir

Esecuzione di esempio:

$ python -c "import os,sys; print '\n'.join([os.path.join(sys.argv[1],i) for i in os.listdir(sys.argv[1]) if os.path.islink(os.path.join(sys.argv[1],i))])" /etc
/etc/vtrgb
/etc/printcap
/etc/resolv.conf
/etc/os-release
/etc/mtab
/etc/localtime

Questo può essere esteso per essere ricorsivo tramite la os.walkfunzione, ma è sufficiente utilizzare la semplice generazione di elenchi per elencare i collegamenti in una singola directory come ho mostrato sopra.

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.