Aqui está a extensão da pergunta: Como limite o número de arquivos impressos por ls?
com condição adicional: como imprimir os resultados em quantas colunas caberem na largura atual do terminal - como ls
faz por padrão.
Eu entendo como limitar o número de arquivos por head
comando, mas não encontrei a solução sobre como imprimir arquivos em colunas da mesma forma que ls
faz por padrão, mas após o processamento através do pipe.
Eu tentei ls -C
sinalizar (de man ls
:) -C list entries by columns
com tubulação para cat
. Mas sua saída difere de ls
fora:
for i in {1..30}; do touch file$i; done; echo '"ls" out:'; ls; echo '"ls -C | cat" out:'; ls -C | cat
"ls" out:
file1 file11 file13 file15 file17 file19 file20 file22 file24 file26 file28 file3 file4 file6 file8
file10 file12 file14 file16 file18 file2 file21 file23 file25 file27 file29 file30 file5 file7 file9
"ls -C | cat" out:
file1 file12 file15 file18 file20 file23 file26 file29 file4 file7
file10 file13 file16 file19 file21 file24 file27 file3 file5 file8
file11 file14 file17 file2 file22 file25 file28 file30 file6 file9
"ls" out fornece 2 linhas. E "ls -C | cat" out fornece 3 linhas. Isso pode ser ls -C
um bug?
Eu tentei column
o comando. Mas quando um arquivo com nome mais longo está presente, ele fornece resultados diferentes de ls
.
mv file30 file-with-long-name; ls
file1 file11 file13 file15 file17 file19 file20 file22 file24 file26 file28 file3 file5 file7 file9
file10 file12 file14 file16 file18 file2 file21 file23 file25 file27 file29 file4 file6 file8 file-with-long-name
ls | cat | column -c $(tput cols)
file1 file14 file19 file23 file28 file6
file10 file15 file2 file24 file29 file7
file11 file16 file20 file25 file3 file8
file12 file17 file21 file26 file4 file9
file13 file18 file22 file27 file5 file-with-long-name
ls
dá 2 linhas. E ls | cat | column -c $(tput cols)
dá 5 linhas.
tput cols
— calcula a largura do terminal. Existe uma alternativa para column
não formatar a largura de todas as colunas de acordo com o nome de arquivo mais longo, mas fará isso como ls
faz?
Pode haver um comando alternativo para ls
obter essa impressão limitando o número máximo de arquivos? (Mas eu também gostaria de ter uma ls
coloração semelhante à dos arquivos.)
Com cada um cd
para outro diretório, quero mostrar automaticamente o conteúdo do diretório atual. Isso pode ser feito colocando ls
uma $PROMPT_COMMAND
variável de ambiente. Mas há um problema com diretórios que contêm muitos arquivos. Eles farão muito barulho/lixo no console. Quero restringi-los para limitar ls
a produção.