Existe uma maneira de fazer isso? Por exemplo, se a receber um nome longo 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/
Posso "atualizar" de ls
para ls -l
, já que tenho o nome de um arquivo ou diretório com mais de 20 caracteres?
Existe uma maneira de configurar uma função bash para .bashrc
fazer isso? Chamarei a função resultante de lls().
@tripleee perguntou:
Você quer
ls -l
quando o nome do arquivo de entrada for longo? Por que? Isso tornará a saída mais longa, não mais curta. E se você receber uma mistura de nomes de arquivos longos e curtos?
Eu quero mais para que a leitura dos nomes de arquivos longos seja sistematizada em uma lista (e mais fácil para mim digerir e ler descendo em uma coluna fixa); para uma mistura de nomes de arquivos longos e curtos, eu usaria o formato de lista como padrão.
Responder1
Não há nenhuma opção integrada ls
que faça o que você deseja. Você teria que analisar a saída e reiniciar se nomes de arquivos "longos" forem encontrados ou fazer algo como:
$ ls ??????????* >& /dev/null && ls -l || ls
(Coloque quantos ?
forem o seu limite de comprimento. Você pode configurá-lo como um alias.)
Por que você simplesmente não usa ls -1
? (Esse é um, não um L minúsculo.) Ele sempre lista os arquivos em uma única coluna. (Ou canalize ls
para more
ou less
, que também vai para a exibição de coluna única.) Ou use find
with -maxdepth 1
.
Responder2
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
ou, graças à sugestão do manatwork, esta maneira muito mais simples que assume que o GNU wc está disponível:
[[ $(ls "$@" | wc -L) -gt 20 ]] && ls "$@" || ls -l "$@"
Responder3
Esta é minha tentativa independente do que eu queria:
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
}
Coloquei isso no meu .bashrc. Isso requer o uso de tr, cut e wc.