¿Hay alguna manera de hacer esto? Por ejemplo, si obtiene un nombre largo como:
i-have-names-that-are-too-long-to-describe/
i-have-names-that-are-too-long-to-describe-2/
i-have-names-that-are-too-long-to-descri-3/
¿Puedo "actualizar" de ls
a ls -l
dado que tengo un nombre de archivo o directorio que tiene más de, digamos, 20 caracteres?
¿Hay alguna manera de configurar una función bash en mi .bashrc
para hacer esto? Llamaré a la función resultante lls().
@tripleee preguntó:
¿Quiere
ls -l
que el nombre del archivo de entrada sea largo? ¿Por qué? Hará que la salida sea más larga, no más corta. ¿Qué pasa si recibe una combinación de nombres de archivos largos y cortos?
Lo quiero más para que la lectura de los nombres de archivos largos se sistematice en una lista (y sea más fácil para mí digerir y leer en una columna fija); para una combinación de nombres de archivos largos y cortos, usaría de forma predeterminada el formato de lista.
Respuesta1
No hay ninguna opción incorporada ls
que haga lo que usted quiere. Tendría que analizar el resultado y luego reiniciar si se encuentran nombres de archivos "largos", o hacer algo como:
$ ls ??????????* >& /dev/null && ls -l || ls
(Pon tantos ?
como tu límite de longitud. Puedes configurarlo como un alias).
¿Por qué no lo usas simplemente ls -1
? (Ese es un uno, no una L minúscula). Siempre enumera los archivos en una sola columna. (O canalizar ls
a more
o less
, que también va a la visualización de una sola columna). O utilizar find
con -maxdepth 1
.
Respuesta2
if [ $(ls "$@" | ( max=0; while read l ; do len=${#l} ; [[ $max -lt $len ]] && max=$len; done; echo $max )) -gt 20 ]
then
ls "$@"
else
ls -l "$@"
fi
o, gracias a la sugerencia de manatwork, esta forma mucho más sencilla que supone que GNU wc está disponible:
[[ $(ls "$@" | wc -L) -gt 20 ]] && ls "$@" || ls -l "$@"
Respuesta3
Este es mi intento independiente de lo que quería:
lls(){
opt=" "
for i in $(ls -l | tr -s " " | cut -d' ' -f9)
do
count=$(echo $i | wc -m)
if [ $count -gt 20 ] ; then
opt=" -l"; break;
fi
done
ls $opt
}
Coloqué esto en mi .bashrc. Sin embargo, esto requiere el uso de tr, cut y wc.