Visualizza solo file e cartelle che sono collegamenti simbolici in tcsh o bash
Domanda
Fondamentalmente voglio fare quanto segue:
ls -l[+someflags]
(o in qualche altro modo) che visualizzerà solo file che sono collegamenti simbolici
in modo che l'output sembrerebbe
-rw-r--r-- 1 username grp size date-time filename -> somedir
-rw-r--r-- 1 username grp size date-time filename2 -> somsdfsdf
ecc.
Ad esempio,
per mostrare solo le directory che ho un alias:
alias lsd 'ls -l | grep ^d'
Mi chiedo come visualizzare solo file nascosti o solo directory nascoste?
Ho la seguente soluzione, tuttavia non visualizza l'output a colori :(
ls -ltra | grep '\->'
Soluzione
Trova tutti i collegamenti simbolici in una directory:
ls -l `find /usr/bin -maxdepth 1 -type l -print`
Per l'elenco dei file nascosti:
ls -ald .*
Altri suggerimenti
ls -l | grep lrw
mostra solo i collegamenti simbolici (file e directory). Non sono sicuro di come renderli colorati, tuttavia.
ls -lad .*
mostra solo file / directory nascosti
ls -l | grep drw
mostra solo le directory.
Solo per " nascosto " cartelle - dot cartelle, prova:
ls -l .**
Sì, i due asterischi sono necessari, altrimenti otterrai anche. e .. nei risultati.
Per i link simbolici, prova il programma symlink:
symlinks -v .
(mostra tutti i collegamenti simbolici nella directory corrente)
Per visualizzare SOLO i symlink e ciò a cui si collegano:
find -P . -type l -exec echo -n "{} -> " \; -exec readlink {} \;
Limitare a SOLO QUESTA DIR
find -P . -maxdepth 1 -type l -exec echo -n "{} -> " \; -exec readlink {} \;
Esempio di output (dopo ln -s / usr / bin moo):
./moo -> /usr/bin
Eri quasi lì con la tua soluzione grep; concentriamoci sul farti di nuovo COLORE.
Prova questo:
ls --color=always -ltra | grep '->'
Migliorare un po 'la risposta accettata data da @ChristopheD (commento coudnt sulla risposta accettata poiché non ho abbastanza reputazione)
Uso un alias
findsymlinks <path> <depth>
dove si trova l'alias
alias findsymlinks "find \!:1 -maxdepth \!:2 -type l -print | xargs ls -l --color=auto"
Prova il flag del tipo di file ed elimina l'aggiunta @
ls -F /home/usr/foo | grep "@" | sed 's/@//'
Per (t) csh :
ls --color=always -ltra | grep '\->'
(Questa è semplicemente la risposta di pbr ma con il trattino scappato.)
Mac OSX
Su OSX, ls
funziona in modo diverso, quindi aggiungilo al tuo file ~ / .cshrc
:
setenv CLICOLOR_FORCE 1 # (equivalent of Linux --color=always)
E poi chiama:
ls -G -ltra | grep '\->' # (-G is equivalent of ls --color)
Per bash:
Questo fornisce un buon risultato.
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
Questo funziona bene per me, tuttavia se stai cercando / la radice del filesystem dovrai omettere la directory proc
Utilizzo: foo $ path
Utilizza il percorso corrente se non specificato.
#!/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