Encontre os arquivos mais recentes

Encontre os arquivos mais recentes

Como descubro o arquivo acessado mais recentemente em um determinado diretório?

Posso usar o findcomando para listar todos os arquivos modificados/acessados ​​nos últimos nminutos. Mas aqui no meu caso, não tenho certeza de quando o último arquivo foi modificado/acessado? Tudo o que preciso é listar todos os arquivos que foram acessados/modificados muito recentemente entre todos os outros subarquivos ou subdiretórios, classificados por seus tempos de acesso/modificação, por exemplo.

Isso é possível?

Responder1

Para imprimir os 3 últimos arquivos acessados ​​(ordenados do último arquivo acessado até o terceiro último arquivo acessado):

find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'

Para imprimir os últimos 3 arquivos modificados (classificados do último arquivo modificado até o terceiro último arquivo modificado):

find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
  • find . -type f -exec stat -c '%X %n' {} \;: imprime o horário do último acesso seguido do caminho do arquivo para cada arquivo na hierarquia de diretórios atual;
  • find . -type f -exec stat -c '%Y %n' {} \;: imprime a hora da última modificação seguida do caminho do arquivo para cada arquivo na hierarquia de diretórios atual;
  • sort -nr: classifica em ordem numérica inversa;
  • cut -d' ' -f2-: imprime todos os campos separados por espaço a partir do segundo campo;
  • awk 'NR==1,NR==3 {print}': imprime linhas no intervalo 1-3.

Você pode alterar o número de arquivos a serem exibidos alterando 3 para o número desejado de arquivos no formato awk 'NR==1,NR==3 {print}'.

Esta resposta é baseada na versão GNU do stat, portanto, os usuários em sistemas baseados em BSD terão que alterar a string de formato dos statcomandos para que imprimam os carimbos de data e hora relevantes.

~ % touch file\ 1
~ % touch file\ 2
~ % touch file\ 3
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % cat file\ 1
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 1
./file 3
./file 2
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 3
./file 2
./file 1
~ % touch file\ 2
~ % find . -type f -exec stat -c '%X %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 2
./file 1
./file 3
~ % find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | cut -d' ' -f2- | awk 'NR==1,NR==3 {print}'
./file 2
./file 3
./file 1

Responder2

Se você quiser que os arquivos em um determinado diretório sejam classificados por idade de modificação (os mais recentes primeiro):

ls -t

Para classificar por tempo de acesso, adicione a -uopção.

ls -tu

No entanto, tome cuidado para queos sistemas Linux modernos não rastreiam tempos de acesso exatos por padrão. Portanto, os carimbos de data/hora de acesso podem não ser confiáveis.

Se você deseja encontrar o arquivo mais recente em uma árvore de diretórios, incluindo subdiretórios, o método mais fácil é usar o zsheliminatórias globais.

print -lr -- **/*(om)

Use oaem vez de omusar o tempo de acesso em vez do tempo de modificação. Você pode restringir as correspondências, por exemplo, para obter os 10 arquivos mais recentes:

print -lr -- **/*(om[1,10])

Esses ignoram arquivos ocultos. Se você quiser considerar também os arquivos ocultos, adicione o Dqualificador glob. Você também pode adicionar o .qualificador glob para considerar apenasregulararquivos (não considera links simbólicos, diretórios, fifos...), e mm-60ou mh-1restringir a arquivos modificados pela última vez na última hora.

Responder3

Você pode usar a opção recursiva ( -R) junto lscom a opção de classificação por tempo ( -t) e a opção de classificação reversa ( -r) para listar todos os arquivos em uma árvore de diretórios. Isso não classificará todos os arquivos por datas de acesso/modificação nos subdiretórios, mas os classificará por essa data em cada subdiretório de forma independente.

Usando um comando como este: ls -ltrR <sometopdir>.

Exemplo

$ ls -ltrR .
total 759720
-rw-r-----@  1 sammingolelli  staff    2514441 Mar 31  2015 restfulapi-120704053212-phpapp01.pdf
-rw-r-----@  1 sammingolelli  staff     567808 Apr  7  2015 USGCB-Windows-Settings.xls
-rw-r-----@  1 sammingolelli  staff     180736 Apr  7  2015 USGCB-RHEL5-Desktop-Settings-Version-1.2.5.0.xls
-rw-r-----@  1 sammingolelli  staff       6474 Apr  8  2015 tap_kp_mavericks.txt

./kerberos:
total 5464
-rw-r-----@ 1 sammingolelli  staff    37317 Oct  2 13:03 Set_up_Kerberos_instruction_d8.docx
-rw-r-----@ 1 sammingolelli  staff  2753195 Oct 13 13:49 Keberos configuration with AD 01_09_2014.pdf

./homestarrunner:
total 10624
-rw-rw-rw-@ 1 sammingolelli  staff   319422 May 10  2000 error_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    53499 Jun  8  2001 sb_duck.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   199254 Mar 11  2002 email_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff    39288 Mar 25  2002 bubs_dontutalk.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    75432 May  6  2002 trash_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   298946 Dec  1  2002 error_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   298686 Dec  1  2002 startup_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    90279 Dec  1  2002 sb_meedlymee.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    73561 Dec  1  2002 sb_dubdeuce.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   193097 Dec  1  2002 sb_pizza.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    30093 Dec  1  2002 sb_stiny.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    61858 Dec  1  2002 ss_sadflying.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   150142 Dec  1  2002 email_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    68545 Dec  1  2002 bubs_grabbinbutt.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    61022 Dec  1  2002 cz_jeorghb.mp3
-rw-rw-rw-@ 1 sammingolelli  staff    40124 Dec  1  2002 marzy_nasty.mp3
-rw-rw-rw-@ 1 sammingolelli  staff   224116 Dec  1  2002 shutdown_sb.wav
-rw-rw-rw-@ 1 sammingolelli  staff   260546 Dec  1  2002 shutdown_hs.wav
-rw-rw-rw-@ 1 sammingolelli  staff    57686 Dec  1  2002 trash_hs.wav

Responder4

Você deseja classificar o conjunto completo de arquivos "recentes" pelo horário de acesso/modificação, independentemente de sua localização na árvore de arquivos?

Uma maneira de fazer isso é imprimir stato horário de modificação de cada arquivo, sortpelo resultado, e depois cuto horário de modificação a partir dos resultados.

Isso será interrompido para arquivos que contenham novas linhas em seus nomes, mas para outros arquivos, aqui está uma solução que listará os arquivos modificados nos últimos 60 minutos, ordenados do mais recente para o menos modificado:

find . -type f -mmin -60 -exec stat -c $'%Y\t%n' {} + | sort -nr | cut -f2-

informação relacionada