Como listar os últimos arquivos modificados em um diretório específico recursivamente

4

Pode ser uma questão genérica do Linux, mas vou tentar aqui.

Eu preciso de uma lista de arquivos modificados recentemente com muita frequência e atualmente estou direcionando ls de saída para grep com o parâmetro hoje ou uma certa hora, mas preciso alterar a grep frequentemente para obter uma lista atualizada, sendo um pouco improdutivo.

Existe um comando fácil para listar os últimos arquivos modificados em um determinado caminho?

    
por Tiberiu C. 11.10.2015 / 18:17

3 respostas

8

Para encontrar os últimos 5 arquivos modificados de um determinado diretório recursivamente, a partir desse diretório, execute:

find . -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5
  • %T@ com -printf predicado de find obterá tempo de modificação desde a época dos arquivos, %p imprimirá os nomes dos arquivos

  • sort -k1,1nr inverte numericamente sort o resultado de acordo com o horário da época

  • head -5 nos dará os últimos cinco nomes de arquivos modificados

Se você quiser pesquisar apenas no diretório atual (não recursivamente), use stat :

stat -c '%Y %n' * | sort -k1,1nr | head -5

Ou find :

find . -maxdepth 1 -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5

Verifique man find e man stat para ter mais ideia.

    
por heemayl 11.10.2015 / 19:39
3

O script abaixo lista todos os arquivos recursivamente dentro de um diretório, editado há menos tempo que um tempo arbitrário. Além disso, exibe o intervalo de tempo desde a última edição.

Pode ser usado com o comando:

findrecent <directory> <time(in hours)>

como mostrado abaixo:

Neste exemplo, todos os arquivos da minha área de trabalho, editados há menos de 36 horas, estão listados.

O script

#!/usr/bin/env python3
import os
import time
import sys

directory = sys.argv[1]

try:
    t = int(sys.argv[2])
except IndexError:
    t = 1

currtime = time.time(); t = t*3600

def calc_time(minutes):
    # create neatly displayed time
    if minutes < 60:
        return "[edited "+str(minutes)+" minutes ago]"
    else:
        hrs = int(minutes/60); minutes = int(minutes - hrs*60)
        return "[edited "+str(hrs)+" hours and "+str(minutes)+" minutes ago]"

for root, dirs, files in os.walk(directory):
    for file in files:
        file = os.path.join(root, file); ftime = os.path.getctime(file)
        edited = currtime - ftime
        if edited < t:
            print(file, calc_time(int(edited/60)))

Como usar

  1. Crie, se ainda não existir, o diretório ~/bin
  2. Copie o script acima em um arquivo vazio, salve-o como findrecent in ~/bin
  3. Torne o script executável
  4. Faça logout e volte e pronto

Nota

  • se não houver tempo, o script listará todos os arquivos editados na última hora
  • se um diretório incluir espaços, use aspas, como no exemplo
por Jacob Vlijm 11.10.2015 / 19:54
1

É tão simples, na verdade. Para obter o arquivo mais recente no diretório de groselha:

ls -Art | tail -n 2

Para obter o arquivo mais recente em outro diretório, por exemplo, em / opt / spark /:

ls /opt/spark/ -Art | tail -n 1

É quando eu uso no meu cluster:

aa23916@picard03:/opt/spark/applicationHistory$ ls -Art | tail -n 2
app-20180124162809-0004
app-20180124163207-0005.inprogress

Simples e fácil:)

    
por A Alnafessah 24.01.2018 / 18:19