Como posso listar (ls) os 5 últimos arquivos modificados em um diretório?

138

Eu sei que ls -tirá listar todos os arquivos por hora modificada. Mas como posso limitar esses resultados apenas aos últimos n arquivos?

Ryan
fonte
10
Inverter a ordem ls -lrtpode ajudar alguém.
PJ Brunet
Amo isso @PJBrunet. Formei o hábito de sempre estar convivendo tharl, pois tende a ter tudo o que preciso.
Adam Grant

Respostas:

246

Tente usar a cabeça ou a cauda. Se você deseja os 5 arquivos modificados mais recentemente:

ls -1t | head -5

O -1 (que é um) indica um arquivo por linha e o cabeçalho diz que recebe as 5 primeiras entradas.

Se você quiser as últimas 5 tentativas

ls -1t | tail -5
Paul Rubel
fonte
2
Se não me engano, o shell representa a saída lsem várias colunas, mas a saída de lsé canalizada para comando a seguir com 1 arquivo / dir em um momento
Alex
esse parece ser o caso. Bela simplificação.
Paul Rubel 28/03
3
Isso ignora o total no topo:ls -1t | head -n 6 | tail -n 5
Ryan
1
Não vejo um total, mas se existe um que certamente funcionaria.
precisa
18

A resposta aceita lista apenas os nomes dos arquivos, mas para obter os 5 principais arquivos, também é possível usar:

ls -lht | head -6

Onde:

-l saídas em formato de lista

-h torna a saída legível por humanos (ou seja, os tamanhos dos arquivos aparecem em kb, mb, etc.)

-t classifica a saída colocando primeiro o arquivo modificado mais recentemente

head -6mostrará 5 arquivos porque lsimprime o tamanho do bloco na primeira linha de saída.

Eu acho que essa é uma abordagem um pouco mais elegante e possivelmente mais útil.

Exemplo de saída:

total 26960312 -rw-r--r--@ 1 user staff 1.2K 11 Jan 11:22 phone2.7.py -rw-r--r--@ 1 user staff 2.7M 10 Jan 15:26 03-cookies-1.pdf -rw-r--r--@ 1 user staff 9.2M 9 Jan 16:21 Wk1_sem.pdf -rw-r--r--@ 1 user staff 502K 8 Jan 10:20 lab-01.pdf -rw-rw-rw-@ 1 user staff 2.0M 5 Jan 22:06 0410-1.wmv

samisnotinsane
fonte
12

Use o tailcomando:

ls -t | tail -n 5
Alex
fonte
Isso dá os 5 mais antigos. Você precisa reverter o sort ( ls -tr) ou usar, em headvez de tail, para obter os 5 mais novos.
Headbank
2

Por padrão, ls -tclassifica a saída da mais nova para a mais antiga; portanto, a combinação de comandos a ser usada depende de qual direção você deseja que sua saída seja ordenada.

Para os 5 arquivos mais recentes ordenados do mais recente para o mais antigo, use headas 5 primeiras linhas de saída:

ls -t | head -n 5

Para os 5 arquivos mais recentes ordenados do mais antigo para o mais novo, use a -ropção para reverter lsa ordem de classificação e use tailas 5 últimas linhas de saída:

ls -tr | tail -n 5
Headbank
fonte
1

ls -tlistar arquivos por hora de criação e não pela última vez modificada. Use ls -ltcse desejar listar arquivos pela última vez modificada, da última para a primeira (de cima para baixo). Assim, para listar o último n:ls -ltc | head ${n}

victrr
fonte
1
Qual plataforma / versão você se refere? Você pode fornecer um link? Olhando para a página de manual do linux, obtém-se o oposto do que você declara: -t sort by modification time, newest first
Joma /