web-dev-qa-db-fra.com

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

Fondamentalement, je veux faire ce qui suit:

ls -l[+someflags]

(ou par un autre moyen) qui n'affichera que les fichiers qui sont des liens symboliques

de sorte que la sortie aurait l'air

-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 uniquement les répertoires cachés?

J'ai la solution suivante, mais elle n'affiche pas la sortie en couleur :(

ls -ltra | grep '\->'
35
vehomzzz

Retrouvez tous les liens symboliques dans un annuaire:

ls -l `find /usr/bin -maxdepth 1 -type l -print`

Pour la liste des fichiers cachés:

ls -ald .*
58
ChristopheD
ls -l | grep lrw 

affiche uniquement les liens symboliques (fichiers et répertoires). Je ne sais pas comment les rendre colorés, cependant.

ls -lad .* 

affiche uniquement les fichiers/répertoires cachés

ls -l | grep drw

affiche uniquement les répertoires.

13
John Shirey

Pour les dossiers "cachés" uniquement - 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 dans le répertoire actuel)

13
jmanning2k

Pour afficher JUSTE les liens symboliques et les liens vers ceux-ci:

find -P . -type l -exec echo -n "{} -> " \; -exec readlink {} \;

Limiter à JUSTE CE 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
9
Michael Sandler

Vous étiez presque là avec votre solution grep; concentrons-nous sur la récupération de la COULEUR.

Essaye ça:

 ls --color = toujours -ltra | grep '->' 
7
pbr

Amélioration un peu de la réponse acceptée donnée par @ChristopheD (impossible de 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" 
5
Pranav Rai

Essayez l'indicateur de type de fichier et supprimez l'ajout de @

ls -F /home/usr/foo | grep "@" | sed 's/@//'
3
Shang Wu

Pour (t) csh :

ls --color=always -ltra | grep '\->'

(C'est simplement réponse de pbr mais avec le tiret échappé.)

Mac OSX

Sous OSX, ls fonctionne différemment, alors ajoutez ceci à votre ~/.cshrc fichier:

setenv CLICOLOR_FORCE 1   # (equivalent of Linux --color=always)

Et puis appelez:

ls -G -ltra | grep '\->'  # (-G is equivalent of ls --color)
2
supergra
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, cependant, si vous recherchez/la racine du système de fichiers, vous devrez omettre le répertoire proc

1
alignedfibers

Pour bash:
Cela fournit une sortie agréable.

 sl = `find -L/path/to/target -xtype l`; pour les liens dans $ sl; do ls --color = always -ltra $ links; fait | sed 's/^//'
1
user3254833

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
0
Justin D.