Afficher uniquement les fichiers et les dossiers qui sont des liens symboliques dans tcsh ou bash
Question
En gros, je veux faire ce qui suit:
ls -l[+someflags]
(ou par un autre moyen) qui affichera uniquement les fichiers qui sont des liens symboliques
afin que la sortie ressemble
-rw-r--r-- 1 username grp size date-time filename -> somedir
-rw-r--r-- 1 username grp size date-time filename2 -> somsdfsdf
etc.
Par exemple,
pour afficher uniquement les répertoires, j'ai un alias:
alias lsd 'ls -l | grep ^d'
Je me demande comment afficher uniquement les fichiers cachés ou les répertoires cachés?
J'ai la solution suivante, mais le résultat n'est pas affiché en couleur: (
ls -ltra | grep '\->'
La solution
Rechercher tous les liens symboliques dans un répertoire:
ls -l `find /usr/bin -maxdepth 1 -type l -print`
Pour la liste des fichiers cachés:
ls -ald .*
Autres conseils
ls -l | grep lrw
affiche uniquement les liens symboliques (fichiers et répertoires). Vous ne savez pas comment les colorer, cependant.
ls -lad .*
affiche uniquement les fichiers / répertoires cachés
ls -l | grep drw
affiche uniquement les répertoires.
Pour seulement "masqué" dossiers - dossiers à points, essayez:
ls -l .**
Oui, les deux astérisques sont nécessaires, sinon vous obtiendrez également. et .. dans les résultats.
Pour les liens symboliques, essayez le programme des liens symboliques:
symlinks -v .
(affiche tous les liens symboliques sous le répertoire actuel)
Pour afficher JUST les liens symboliques et leur lien:
find -P . -type l -exec echo -n "{} -> " \; -exec readlink {} \;
Limiter à JUST THIS DIR
find -P . -maxdepth 1 -type l -exec echo -n "{} -> " \; -exec readlink {} \;
Exemple de sortie (après ln -s / usr / bin moo):
./moo -> /usr/bin
Vous y étiez presque avec votre solution grep; concentrons-nous sur la couleur à nouveau.
Essayez ceci:
ls --color=always -ltra | grep '->'
Améliorant un peu la réponse acceptée donnée par @ChristopheD (je peux commenter la réponse acceptée car je n’ai pas assez de réputation)
J'utilise un alias
findsymlinks <path> <depth>
où l'alias est
alias findsymlinks "find \!:1 -maxdepth \!:2 -type l -print | xargs ls -l --color=auto"
Essayez l'indicateur de type de fichier et supprimez le @ ajouté
ls -F /home/usr/foo | grep "@" | sed 's/@//'
Pour (t) csh :
ls --color=always -ltra | grep '\->'
(Il s'agit simplement de réponse de pbr mais avec le trait d'union échappé.)
Mac OSX
Sous OSX, ls
fonctionnant différemment, ajoutez-le à votre fichier ~ / .cshrc
:
setenv CLICOLOR_FORCE 1 # (equivalent of Linux --color=always)
Et appelez ensuite:
ls -G -ltra | grep '\->' # (-G is equivalent of ls --color)
Pour bash:
Ceci fournit un bon résultat.
sl=`find -L /path/to/target -xtype l`; for links in $sl; do ls --color=always -ltra $links; done | sed 's/^/ /'
echo > linklist.found && $(for i in `find /path/to/dir/ -type l`; do echo `ls -d --color=always $i` `echo " -> "` $(ls -d --color=always `readlink -f $i`) >> linklist.found; echo >> linklist.found; done;) && cat linklist.found | more
Cela fonctionne bien pour moi, mais si vous recherchez / la racine du système de fichiers, vous devrez omettre le répertoire proc
Utilisation: foo $ path
Utilise le chemin actuel si aucun n'est spécifié.
#!/bin/bash
case "$1" in
-r)
find $2 -type l -print | while IFS= read line ; do ls -l --color=always "$line"; done
;;
--help)
echo 'Usage: foo [-r] [$PATH]'
echo
echo '-r Recursive'
;;
*)
ls --color=always -ltra $1 | grep '\->'
esac