Come elencare tutti i collegamenti simbolici in una directory

96

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

    
posta wisaac407 09.09.2014 - 19:56

8 risposte

57

Puoi usare grep con il comando ls per elencare tutti i link simbolici presenti nella directory corrente.

Questo elencherà tutti i collegamenti presenti nella directory corrente.

ls -la /var/www/ | grep "\->"
    
risposta data g_p 09.09.2014 - 20:02
183

L'analisi di ls è una cattiva idea ® , preferisci un semplice find in quella caso:

find . -type l -ls

Per elaborare solo la directory corrente:

find . -maxdepth 1 -type l -ls

Crediti: Come faccio a fare in modo che la shell riconosca i nomi di file restituiti da un comando 'ls -A', e questi nomi contengono spazi?

    
risposta data Sylvain Pineau 09.09.2014 - 20:21
8

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

guarda il risultato dell'esecuzione di ls -la :

[email protected]:~$ cd /sys/devices/platform/sony-laptop
[email protected]:/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 tutta la directory simbolica ha l'autorizzazione l al prompt dei flag di autorizzazione. e se prendi un grep con ^l puoi elencare solo i file simbolici o la directory:

[email protected]:/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
[email protected]:/sys/devices/platform/sony-laptop$ 

driver e sottosistema sono collegamenti simbolici ad altre directory qui.

    
risposta data αғsнιη 09.09.2014 - 20:32
3

POSIXly:

find ! -name . -prune -type l
    
risposta data cuonglm 09.09.2014 - 20:24
3

grep è tuo amico:

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

Questo elenco elenca le righe che iniziano con "l" che rappresentano i collegamenti nella colonna dei perms al posto di l usa d per le directory e - per i file

    
risposta data Kalibur 08.10.2015 - 12:22
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 link (rigidi o morbidi) e questa soluzione funziona anche per i collegamenti simbolici.

    
risposta data saptarshi nag 09.09.2014 - 20:18
0

Per visualizzare i collegamenti simbolici in una directory:

  1. Apri un terminale e spostati in quella directory.

  2. Digitare il comando:

    ls -la
    

    Questo elenco lungo tutti i file nella directory anche se sono nascosti.

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

risposta data sandeep srivastav vaddiparthy 10.09.2014 - 07:43
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 funzione os.walk , ma è sufficiente usare la semplice generazione di liste per elencare i collegamenti in una singola directory come ho mostrato sopra.

    
risposta data Sergiy Kolodyazhnyy 09.01.2017 - 12:15

Leggi altre domande sui tag