Encontrar os arquivos mais recentes

4

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

Eu posso usar o comando find para listar todos os arquivos modificados / acessados no último n minutos. Mas aqui no meu caso, não tenho certeza quando o último arquivo foi modificado / acessado? Tudo que eu preciso é listar todos os arquivos que foram acessados / modificados muito recentemente entre todos os outros sub-arquivos ou subdiretórios, classificados por seus tempos de acesso / modificação, por exemplo.

Isso é possível?

    
por SHW 03.11.2015 / 08:03

4 respostas

2

Você pode usar a opção recursiva ( -R ) para ls juntamente com a opção de classificação por hora ( -t ) e a opção de classificação inversa ( -r ) para listar todos os arquivos em uma árvore de diretórios . Isso não classificará todos os arquivos por suas datas de acesso / modificação nos subdiretórios, mas os classificará até essa data em cada subdiretório independentemente.

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
    
por 03.11.2015 / 15:09
2

Para imprimir os últimos 3 arquivos acessados (classificados do último arquivo acessado para o terceiro último arquivo acessado):

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

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

find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print $2}'
  • find . -type f -exec stat -c '%X %n' * : imprime o horário do último acesso seguido pelo caminho do arquivo para cada arquivo na hierarquia de diretórios atual;
  • find . -type f -exec stat -c '%Y %n' * : imprime o horário da última modificação seguido pelo caminho do arquivo para cada arquivo na hierarquia de diretórios atual;
  • sort -nr : classifica em ordem numérica inversa;
  • awk 'NR==1,NR==3 {print $2}' : imprime o segundo campo da primeira, segunda e terceira linha.

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

% touch file1
% touch file2
% touch file3
% find . -type f -exec stat -c '%X %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
./file3
./file2
./file1
% find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
./file3
./file2
./file1
% cat file1
% find . -type f -exec stat -c '%X %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
./file1
./file3
./file2
% find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
./file3
./file2
./file1
% touch file2
% find . -type f -exec stat -c '%X %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
./file2
./file1
./file3
% find . -type f -exec stat -c '%Y %n' {} \; | sort -nr | awk 'NR==1,NR==3 {print }'
./file2
./file3
./file1
    
por 03.11.2015 / 08:23
2

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

ls -t

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

ls -tu

No entanto, lembre-se de que os sistemas Linux modernos não rastreiam tempos de acesso exatos por padrão . Portanto, os registros de data e hora de acesso podem não ser confiáveis.

Se você quiser encontrar o arquivo mais recente em uma árvore de diretórios, incluindo subdiretórios, o método mais fácil, de longe, é usar Qualificadores glob .

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

Use oa em vez de om para usar 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])
    
por 04.11.2015 / 01:11
1

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

Uma maneira de fazer isso é usar stat para imprimir o tempo de modificação de cada arquivo, sort pelo resultado e, em seguida, cut do tempo de modificação dos resultados.

Isso quebrará os arquivos que contêm 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 recentemente modificado:

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

Tags