Afficher uniquement les fichiers et les dossiers qui sont des liens symboliques dans tcsh ou bash

StackOverflow https://stackoverflow.com/questions/1412423

  •  06-07-2019
  •  | 
  •  

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 '\->'
Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top