Como classificar a saída de `ls`?

14

É possível visualizar esta saída classificada com titlepage_1.pdf antes de titlepage_19.pdf?

$ ls
allTitlepage.pdf         titlepage_12.pdf  titlepage_19.tex  titlepage_26.pdf  titlepage_32.tex  titlepage_4.tex
allTitlepage.tex         titlepage_12.tex  titlepage_1.pdf   titlepage_26.tex  titlepage_33.pdf  titlepage_5.pdf
assignment.pdf           titlepage_13.pdf  titlepage_1.tex   titlepage_27.pdf  titlepage_34.pdf  titlepage_5.tex
assignment.tex           titlepage_13.tex  titlepage_20.pdf  titlepage_27.tex  titlepage_34.tex  titlepage_6.pdf
graphicsAssignment2.pdf  titlepage_14.pdf  titlepage_20.tex  titlepage_28.pdf  titlepage_35.pdf  titlepage_6.tex
graphicsAssignment2.tex  titlepage_14.tex  titlepage_21.pdf  titlepage_28.tex  titlepage_35.tex  titlepage_7.pdf
README.md                titlepage_15.pdf  titlepage_21.tex  titlepage_29.pdf  titlepage_36.pdf  titlepage_7.tex
thesisTitlepage.pdf      titlepage_15.tex  titlepage_22.pdf  titlepage_29.tex  titlepage_36.tex  titlepage_8.pdf
thesisTitlepage.tex      titlepage_16.pdf  titlepage_22.tex  titlepage_2.pdf   titlepage_37.pdf  titlepage_8.tex
titlepage_0.pdf          titlepage_16.tex  titlepage_23.pdf  titlepage_2.tex   titlepage_37.tex  titlepage_9.pdf
titlepage_0.tex          titlepage_17.pdf  titlepage_23.tex  titlepage_30.pdf  titlepage_38.pdf  titlepage_9.tex
titlepage_10.pdf         titlepage_17.tex  titlepage_24.pdf  titlepage_30.tex  titlepage_38.tex  titlepage_one.pdf
titlepage_10.tex         titlepage_18.pdf  titlepage_24.tex  titlepage_31.pdf  titlepage_3.pdf   titlepage_one.tex
titlepage_11.pdf         titlepage_18.tex  titlepage_25.pdf  titlepage_31.tex  titlepage_3.tex   titlepage_two.tex
titlepage_11.tex         titlepage_19.pdf  titlepage_25.tex  titlepage_32.pdf  titlepage_4.pdf
alhelal
fonte
3
O título deve ser mais específico, pois parece uma duplicata (que pode ser de qualquer maneira).
Peter Mortensen

Respostas:

31

Use a opção -v [tipo natural de (versão) de números no texto]

ls -v
Vijay
fonte
Se você quiser de uso único coluna ls -1v
Vijay
13

A saída é classificada. De acordo com a página de lsmanual:

Classifique as entradas em ordem alfabética se nenhum -cftuvSUX nem --sort for especificado.

Mas se você quiser ir além, tem pelo menos duas opções:

Opção 1 - lschaves de classificação

man lsinforma sobre várias opções que você pode usar para classificar, especificamente, a página man ls diz:

nenhum (-U), tamanho (-S), tempo (-t), versão (-v), extensão (-X)

No seu caso, você deseja classificar a "versão" (-v). Porém, tenha cuidado, pois isso também classifica qualquer coisa que tenha um blahblah-X.Y.Z-Aarranjo que pode não ser totalmente o que você deseja. Veja também a explicação do GNU sobre o tipo de versão .

Opção 2 - direciona para comandos de classificação

Você pode usar um canal |para enviar a saída para outro comando, por exemplo, o comando sort que você pode usar para classificar de várias outras maneiras, como ls -1 | sort -nútil se você tiver numerados arquivos. A -1opção garante que a saída seja uma linha por arquivo.

Da mesma forma, você pode manipular a saída para ajudar na classificação usando coisas como sedou awk.

Existem várias maneiras de responder a esse tipo de * pergunta. Você pode encontrar um tutorial sobre shell linux útil.

* (Veja o que eu fiz lá? :-P)

restabelecer Monica-dor duh
fonte
6

Como já apontado em um comentário, a saída já está classificada, mas por caracteres, não por números. Você pode canalizar a saída lsatravés da sortqual possui uma opção para classificar por números nas cadeias:

ls | sort --version-sort

Na página de manual :

-V, --version-sort
         natural sort of (version) numbers within text

Desvantagem: quando emitimos ls, os arquivos são mostrados em uma tabela com quantas colunas caberem na tela atual (exatamente como você mostrou na sua postagem). Mas quando lspercebe que sua saída é redirecionada para um arquivo ou canal (como em ls | sort), lsos arquivos são impressos em apenas uma coluna, pois supõe que a saída deve ser processada linha por linha (também conhecida como arquivo por arquivo) por algum outro programa (como sort). Portanto, a saída de ls | sort -Vestará em uma coluna em vez de em uma tabela com várias colunas. Veja a resposta simples mas perfeita de @vijay para saber como evitar isso.

PerlDuck
fonte
1
Você também pode canalizar a saída paracolumn
David Conrad
0

ls -l : lista os arquivos do diretório verticalmente, mas não em uma ordem específica.

ls -l | sort -k 3: -k 3classificaria a saída do comando anterior pela 3ª coluna.

AB01
fonte