Есть ли способ сделать это? Например, если a получает длинное имя, например:
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/
Могу ли я «обновиться» с ls
до ls -l
, если у меня есть имя файла или каталога, которое длиннее, скажем, 20 символов?
Есть ли способ настроить функцию bash в my, .bashrc
чтобы сделать это? Я назову полученную функцию lls().
@tripleee спросил:
Вы хотите,
ls -l
когда имя входного файла длинное? Почему? Это сделает вывод длиннее, а не короче. Что делать, если вы получаете смесь длинных и коротких имен файлов?
Я больше хочу, чтобы длинные имена файлов были систематизированы в список (и мне было бы легче их воспринимать и читать, перемещаясь по фиксированному столбцу); для смеси длинных и коротких имен файлов я бы по умолчанию использовал формат списка.
решение1
Нет встроенной опции, ls
которая делает то, что вам нужно. Вам придется анализировать вывод, а затем перезапускать, если будут найдены «длинные» имена файлов, или делать что-то вроде:
$ ls ??????????* >& /dev/null && ls -l || ls
(Введите столько, ?
сколько позволяет ваша длина. Вы можете установить это как псевдоним.)
Почему бы вам просто не использовать ls -1
? (Это единица, а не строчная буква L.) Он всегда выводит список файлов в одном столбце. (Или передайте ls
по конвейеру more
или less
, что также приводит к отображению в один столбец.) Или используйте find
с -maxdepth 1
.
решение2
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
или, благодаря предложению manatwork, этот гораздо более простой способ, предполагающий доступность GNU wc:
[[ $(ls "$@" | wc -L) -gt 20 ]] && ls "$@" || ls -l "$@"
решение3
Это моя независимая попытка сделать то, что я хотел:
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
}
Я поместил это в свой .bashrc. Хотя это требует использования tr, cut и wc.