ls para listar arquivos classificados por nome de arquivo sem a extensão

0

Eu quero listar um monte de arquivos que são classificados por seus nomes, excluindo a extensão do arquivo. Eu tenho esses arquivos em um diretório

$ls 
mobility_arXiv.tex
mobility_SR.bbl
paper-hj-mm.tex
paper-hj-mm-vp-rkp.tex
paper-hj.tex

Eu quero que a saída seja

mobility_arXiv.tex
mobility_SR.bbl
paper-hj.tex
paper-hj-mm.tex
paper-hj-mm-vp-rkp.tex

Existe uma maneira de conseguir isso?

    
por imsc 30.04.2014 / 14:37

2 respostas

2

Você pode canalizar a saída de ls para cut , o que corta os campos, especificando "." como o delimitador. O resultado pode ser classificado por piping em sort .

ls | cut -f 1 -d '.' | sort

Se você precisa manipular pontos "." no nome do arquivo você pode usar

ls | rev | cut -d . -f 2- | rev | sort

Isso funciona primeiro invertendo cada listagem retornada por ls, depois cortando o primeiro (originalmente último) campo e, em seguida, invertendo novamente.

NOTA: Não pode ser usado com saída de cores

Se você quisesse manter a extensão e classificar apenas a primeira parte do nome do arquivo, poderá usar

ls | sort -k 1,1 -t . 

Aqui está dizendo para usar "." como o delimitador e classificar de acordo com a chave (campo) 1.

    
por 30.04.2014 / 14:41
2

O comando ls classifica os arquivos por filename em ordem alfabética crescente por padrão. A extensão é parte do nome do arquivo, então o melhor que você pode fazer, se você não precisa da extensão na saída é:

ls | cut -f 1 -d '.' | sort

UPDATE

Uma solução melhor:

ls | sort -k 1,1 -t .

Aqui ordenamos que seja usado apenas o campo número 1 e o ponto como separador de campo. Então, está ignorando a extensão, mas não a cortando.

    
por 30.04.2014 / 14:48

Tags