Mostrar solo archivos y carpetas que son enlaces simbólicos en tcsh o bash
Pregunta
Básicamente quiero hacer lo siguiente:
ls -l[+someflags]
(o por algún otro medio) que solo mostrará archivos que son enlaces simbólicos
para que la salida se vea
-rw-r--r-- 1 username grp size date-time filename -> somedir
-rw-r--r-- 1 username grp size date-time filename2 -> somsdfsdf
etc.
Por ejemplo,
para mostrar solo los directorios que tengo un alias:
alias lsd 'ls -l | grep ^d'
¿Me pregunto cómo mostrar solo los archivos ocultos o solo los directorios ocultos?
Tengo la siguiente solución, sin embargo, no muestra la salida en color :(
ls -ltra | grep '\->'
Solución
Encuentre todos los enlaces simbólicos en un directorio:
ls -l `find /usr/bin -maxdepth 1 -type l -print`
Para la lista de archivos ocultos:
ls -ald .*
Otros consejos
ls -l | grep lrw
muestra solo enlaces simbólicos (archivos y directorios). Sin embargo, no estoy seguro de cómo obtener colores.
ls -lad .*
muestra solo archivos / directorios ocultos
ls -l | grep drw
muestra solo directorios.
Por solo " oculto " carpetas - carpetas de puntos, intente:
ls -l .**
Sí, los dos asteriscos son necesarios, de lo contrario también obtendrás. y ... en los resultados.
Para enlaces simbólicos, bueno, prueba el programa de enlaces simbólicos:
symlinks -v .
(muestra todos los enlaces simbólicos en el directorio actual)
Para mostrar SÓLO los enlaces simbólicos y sus vínculos con:
find -P . -type l -exec echo -n "{} -> " \; -exec readlink {} \;
Para limitar a SOLO ESTE DIR
find -P . -maxdepth 1 -type l -exec echo -n "{} -> " \; -exec readlink {} \;
Salida de ejemplo (después de ln -s / usr / bin moo):
./moo -> /usr/bin
Estabas casi allí con tu solución grep; concentrémonos en conseguirle COLOR nuevamente.
Prueba esto:
ls --color=always -ltra | grep '->'
Mejorando un poco la respuesta aceptada dada por @ChristopheD (podría hacer un comentario sobre la respuesta aceptada ya que no tengo suficiente reputación)
Uso un alias
findsymlinks <path> <depth>
donde está el alias
alias findsymlinks "find \!:1 -maxdepth \!:2 -type l -print | xargs ls -l --color=auto"
Pruebe el indicador de tipo de archivo y elimine los @
adjuntosls -F /home/usr/foo | grep "@" | sed 's/@//'
Para (t) csh :
ls --color=always -ltra | grep '\->'
(Esto es simplemente respuesta de pbr pero con el guión escapado.)
Mac OSX
En OSX, ls
funciona de manera diferente, así que agréguelo a su archivo ~ / .cshrc
:
setenv CLICOLOR_FORCE 1 # (equivalent of Linux --color=always)
Y luego llame:
ls -G -ltra | grep '\->' # (-G is equivalent of ls --color)
Para bash:
Esto proporciona un buen resultado.
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
Esto funciona bien para mí, sin embargo, si va a buscar / la raíz del sistema de archivos, deberá omitir el directorio de proceso
Uso: foo $ path
Utiliza la ruta actual si no se especifica ninguna.
#!/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