默认情况下,ls
其输出以多列显示,但当将其发送到分页器时,less
它会被重新格式化为单列。有什么方法可以对原始的多列输出进行分页并保留格式吗?
答案1
有两种选择
-C list entries by columns -x list entries by lines instead of by columns
第一个以列的形式显示输出,其中每一列都位于前一列之后(从排序的角度来看):
enzotib@acer:tmp$ touch {10..99}
enzotib@acer:tmp$ ls -C | less
10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95
11 16 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96
12 17 22 27 32 37 42 47 52 57 62 67 72 77 82 87 92 97
13 18 23 28 33 38 43 48 53 58 63 68 73 78 83 88 93 98
14 19 24 29 34 39 44 49 54 59 64 69 74 79 84 89 94 99
第二种选项将第一个元素放在第一行,然后放在第二行,依此类推:
enzotib@acer:tmp$ ls -x | less
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
当管道传输到寻呼机时,终端宽度和颜色格式不会被考虑在内ls
。要强制执行此操作,您可以执行以下操作
ls -Cw $COLUMNS --color | less -r
其中需要-r
选项来less
正确解释 ANSI 颜色序列。
将此行放入脚本中不起作用,因为COLUMNS
不会导出到子 shell。可以使用两种解决方法
export COLUMNS
在你的~/.bashrc
将该行作为函数或别名实现
~/.bashrc
myls() { ls -Cw $COLUMNS --color "$@" | less -r }