Gostaria de saber um comando ou função no linux bash para obter o timestamp (e talvez formatar sua saída) do último arquivo modificado dentro de um diretório.
Digamos que eu tenha /path/mydir e este diretório tenha muitos arquivos dentro dele. Dado seu caminho, desejo exibir o registro de data e hora do arquivo modificado mais recente.
Eu acho que o procedimento poderia ser fazer um arquivo foreach recursivo, verificar todos eles e atualizar uma variável com o tempo mais recente cada vez que um mais recente for encontrado.
Edit: Desculpe pela confusão, mas eu queria intencionar o carimbo de data/hora da Epoch :)
Uma opção: use o GNU find para percorrer todos os arquivos; imprima o carimbo de data/hora com o caminho do arquivo e classifique por data:
Para apenas o carimbo de data/hora da época,
Dadas as tags linux e bash , bem como a especificação "linux bash" na pergunta, aqui está uma função específica do bash que produzirá o nome do arquivo e o registro de data e hora do arquivo modificado mais recentemente em uma determinada estrutura de diretório:
Use como:
lastmodified /path/mydir
.Ele é executado em um subshell para isolar a opção de shell globstar , bem como as várias atribuições de variáveis. Altere ou remova as instruções printf para capturar os dados de seu interesse.
Ele funciona pedindo ao bash para expandir todos os caminhos de nome de arquivo sob o
$1
parâmetro fornecido e, em seguida, verifica o "Tempo da última modificação em segundos desde a época" com o comando stat . O nome de arquivo mais recente terminará em$latest
, e seu carimbo de data/hora emt
.Certifique-se de que o zsh esteja instalado (todas as principais distribuições têm um pacote para ele).
**/*
é um padrão curinga para corresponder todos os arquivos em subdiretórios recursivamente e(.om[1])
são qualificadores glob para limitar as correspondências a arquivos regulares (.
), classificar por hora de modificação (om
) e manter apenas o arquivo mais recente ([1]
). Os qualificadores glob são um recurso exclusivo do zsh e grande parte de sua funcionalidade, em particular a classificação, é difícil de reproduzir em outros shells.Eu incluo apenas arquivos regulares porque isso geralmente é necessário - mas você pode querer remover o
.
qualificador se quiser que o registro de data e hora reflita a última vez que um arquivo foi excluído, por exemplo.GNU ls tem uma opção para controlar o formato de hora (
--time-style
). Observe que, dependendo do formato de hora, pode ser necessário ajustar o pós-processamento para extrair o campo de hora.Como alternativa, você pode usar o
stat
comando do Linux ou o integrado do zshstat
para imprimir o carimbo de data/hora no formato desejado.O formato de saída é
Month-date-hour-minute filename
Como o arquivo foi criado neste ano, o ano não é exibido. O código pode ser modificado para sempre mostrar o ano se você quiser sempre mostrar o ano.