Preservando a saída de várias colunas de ls ao paginar

4

Por padrão, ls exibe sua saída em várias colunas, mas quando é enviada a um pager como less , é reformatada como uma única coluna. Existe alguma maneira que eu possa paginar a saída original de múltiplas colunas e preservar a formatação?

    
por Matty 20.12.2011 / 09:49

1 resposta

7

Existem duas opções

   -C     list entries by columns
   -x     list entries by lines instead of by columns

o primeiro mostra a saída em colunas, onde cada coluna vem depois do precedente (do ponto de vista da classificação):

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

A segunda opção coloca os primeiros elementos na primeira linha, depois na segunda e assim por diante:

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

Ao direcionar para um pager, a largura do terminal e a formatação da cor não são levadas em consideração em ls . Para forçar isso, você pode fazer

ls -Cw $COLUMNS --color | less -r

onde a opção -r para less é necessária para interpretar corretamente sequências de cores ANSI.
Colocar essa linha em um script não funciona, porque COLUMNS não é exportado para subshells. Duas alternativas podem ser usadas

  1. export COLUMNS no seu ~/.bashrc

  2. implemente essa linha como uma função ou um alias em ~/.bashrc

    myls() {
        ls -Cw $COLUMNS --color "$@" | less -r
    }
    
por enzotib 20.12.2011 / 09:58

Tags