AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 413515
Accepted
user3450548
user3450548
Asked: 2017-12-29 11:28:26 +0800 CST2017-12-29 11:28:26 +0800 CST 2017-12-29 11:28:26 +0800 CST

Data da última modificação "recursiva" do diretório

  • 772

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 :)

bash shell-script
  • 4 4 respostas
  • 17105 Views

4 respostas

  • Voted
  1. Best Answer
    user4556274
    2017-12-29T11:38:53+08:002017-12-29T11:38:53+08:00

    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:

    find /path/mydir -type f -printf "%T+\t%p\n" | sort | tail -1
    

    Para apenas o carimbo de data/hora da época,

    find /path/mydir -type f -printf "%T@\n" | sort | tail -1
    
    • 14
  2. Jeff Schaller
    2017-12-29T12:34:50+08:002017-12-29T12:34:50+08:00

    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:

    function lastmodified () (
      shopt -s globstar
      latest=
      t=0
      for f in "$1"/**
      do
        x=$(stat -c "%Y" "$f")
        if [ $x -gt $t ]
        then
          latest="$f"
          t="$x"
        fi
      done
      printf "%s\n" "$latest"
      printf "%s\n" "$(date -d @${t})"
    )
    

    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 $1parâ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 em t.

    • 2
  3. Gilles 'SO- stop being evil'
    2017-12-29T13:35:57+08:002017-12-29T13:35:57+08:00

    Certifique-se de que o zsh esteja instalado (todas as principais distribuições têm um pacote para ele).

    zsh -c 'ls -log **/*(.om[1])' | awk '{print $4, $5, $6}'
    

    **/*é 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 statcomando do Linux ou o integrado do zshstat para imprimir o carimbo de data/hora no formato desejado.

    zsh -c 'zmodload zsh/stat; stat +mtime -- **/*(.om[1])'
    
    • 2
  4. Praveen Kumar BS
    2017-12-30T14:04:57+08:002017-12-30T14:04:57+08:00
    find . -type f -exec ls -ltr {} \; | awk '{print $6"-"$7"-"$8" "$9}' | sort -k3 | sort -nr | head -1
    

    O formato de saída éMonth-date-hour-minute filename

    Dec-30-03:10 ./1
    

    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.

    • 1

relate perguntas

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • MySQL Select com função IN () com array bash

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve