我有办法做到这一点吗?例如,如果 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 个字符,我可以从 升级到 吗?
有没有办法在 my 中设置 bash 函数.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。