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
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:
Ouvrez un terminal et accédez à ce répertoire.
-
Tapez la commande:
ls -la
Cela listera longtemps tous les fichiers du répertoire même s'ils sont cachés.
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