![ls 命令行换行预防](https://linux22.com/image/210974/ls%20%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%8D%A2%E8%A1%8C%E9%A2%84%E9%98%B2.png)
我正在寻找这个问题的答案,不涉及命令less
:
有没有办法ls
在终端中运行命令并防止长文件名换行?
例如,在运行 ls 时,而不是以下内容:
shortfile
thisisalongfi
lename
shortfile
我希望它在要换行的位置截断长文件名,或者根本不换行,以便它显示为:
shortfile
thisisalongfi
shortfile
答案1
setterm --linewrap off
ls
setterm --linewrap on
setterm
将尽力配置您的终端(终端仿真器),但一般来说,终端可能支持也可能不支持该功能。
答案2
答案3
标准fold(1)
命令在这里有点糟糕,因为很难区分包装的文件名和未包装的文件名:
$ printf 'short\nlongeshort\nshort\n' | fold -w 5
short
longe
short
short
GNUsed
可以工作,但有点受到反斜杠的影响:
$ printf 'short\nlongeshort\nshort\n' | gsed 's/\(.\{5\}\).*/\1/'
short
longe
short
awk
可以显示行被截断的位置:
$ printf 'short\nlongeshort\nshort\n' |
awk -v w=5 '{if(length > w){print substr($0,0,w-3) "..."}else{print}}'
short
lo...
short
尽管这可能应该隐藏在接受宽度参数的脚本中w
,或者$COLUMNS
默认使用。
同时,
$ setterm --linewrap off
ksh: setterm: not found
$ pkglocate setterm
$
不太利于便携性。