分页时保留 ls 的多列输出

分页时保留 ls 的多列输出

默认情况下,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。可以使用两种解决方法

  1. export COLUMNS在你的~/.bashrc

  2. 将该行作为函数或别名实现~/.bashrc

    myls() {
        ls -Cw $COLUMNS --color "$@" | less -r
    }
    

相关内容