Comment lister tous les liens symboliques dans un répertoire

J'ai un lien symbolique dans mon /var/www/ répertoire qui renvoie à WordPress. Quand j'exécute la commande ls -la de la /var/www/ répertoire le lien vers WordPress n'apparaît pas. Existe-t-il un moyen de lister tous les liens symboliques qui se trouvent dans un répertoire?

Parsing ls est un Mauvaise Idée®, préférez un simple find dans ce cas,:

find . -type l -ls

Pour traiter uniquement le répertoire courant:

find . -maxdepth 1 -type l -ls

Crédit: Comment faire en sorte que le shell reconnaisse les noms de fichiers renvoyés par une commande ' ls-A`, et que ces noms contiennent des espaces?

Vous pouvez utiliser grep avec ls commande pour lister tous les liens symboliques présents dans le répertoire courant.

Cela listera tous les liens présents dans le répertoire actuel.

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

grep est ton ami:

ls -lhaF | grep ^l   # list linksls -lhaF | grep ^d   # list directoriesls -lhaF | grep ^-   # list files

Cela listera les lignes commençant par" l " qui représentent les liens dans la colonne perms à la place de l utiliser d pour les annuaires et - pour les fichiers

POSIXly:

find ! -name . -prune -type l

Cela renvoie tous les éléments liés symboliquement (dirs et fns) dans un répertoire:

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

Cependant, afin de distinguer les types d'éléments symboliquement liés réels:

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

Renvoie uniquement les éléments de nom de fichier liés symboliquement. Et,

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

Renvoie uniquement les éléments dirname liés symboliquement.

Pour afficher les liens symboliques dans un répertoire:

  1. Ouvrez un terminal et accédez à ce répertoire.

  2. Tapez la commande:

    ls -la

    Cela listera longtemps tous les fichiers du répertoire même s'ils sont cachés.

  3. Les fichiers qui commencent par l sont vos fichiers de liens symboliques.

Type ls -lai,il listera tous les fichiers et sous-répertoires avec les numéros d'inode correspondants.Vous savez que les fichiers avec le même numéro d'inode sont les liens (durs ou mous) et cette solution fonctionne également pour les liens symboliques.

Peut également être fait avec 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

Exemple de course:

$ 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

Cela peut être étendu pour être récursif via os.walk fonction, mais il suffit d'utiliser la génération de liste simple pour lister les liens dans un seul répertoire comme je l'ai montré ci-dessus.

Veuillez trouver ci-dessous une commande de script bash de doublure pour trouver tous les liens symboliques cassés récursivement dans n'importe quel système d'exploitation basé sur Linux

b=$(find / -type l); for i in $(echo $b); do file $i ; done |grep -i broken 2> /dev/null

utilisation de zsh

ls -l *(@)lrwxrwxrwx 1 david david 15 Nov 18 22:35 gvimrc -> /etc/vim/gvimrclrwxrwxrwx 1 david david 13 Nov 18 22:19 mydomains.php -> mydomains.php