Como visualizar as últimas 5 linhas do último arquivo criado / modificado?

5

Todo dia eu tenho que fazer backup e atualizar o status para dar suporte às equipes em um determinado momento, para o qual preciso verificar as últimas 5 linhas do último arquivo *.aff criado / modificado em um diretório e atualizá-las.

Alguém pode, por favor, me avisar como visualizar as últimas 5 linhas do último arquivo modificado (extensão específica) no linux como no arquivo *.aff ? outros arquivos também são criados, e. *.log , etc.

    
por Ashish 11.11.2014 / 16:20

3 respostas

7

Com o shell zsh :

tail -n 5 ./*.aff(D.om[1])

Com outros shells, é muito difícil criar algo confiável se você não quiser fazer suposições sobre quais nomes de arquivo podem conter.

Por exemplo, o bash equivalente, se você estiver em um sistema GNU recente, seria:

find . -maxdepth 1 -name '*.aff' -type f -printf '%T@:%p
find . -maxdepth 1 -name '*.aff' -type f -printf '%T@/%p
tail -n 5 ./*.aff(D.om[1])
' | sort -rzn | (IFS=/ read -rd '' mtime file && tail -n 5 "$file")
' | sort -rzn | sed -zn 's/[^:]*://p;q' | xargs -r0 tail -n 5

Ou:

find . -maxdepth 1 -name '*.aff' -type f -printf '%T@:%p
find . -maxdepth 1 -name '*.aff' -type f -printf '%T@/%p%pre%' |
  sort -rzn | (IFS=/ read -rd '' mtime file && tail -n 5 "$file")
' | sort -rzn | sed -zn 's/[^:]*://p;q' | xargs -r0 tail -n 5
    
por 11.11.2014 / 16:33
5

Supondo que os nomes dos arquivos não contenham caracteres de nova linha e que todos os arquivos *.aff sejam arquivos regulares:

ls -t1d -- *.aff | head -n 1

fornece o nome do arquivo .aff mais recentemente modificado. Se você quer que as últimas 5 linhas apenas façam:

tail -n 5 -- "$(ls -t1d -- *.aff | head -n 1)"
    
por 11.11.2014 / 16:29
0

Outra abordagem segura que deve funcionar em qualquer sistema GNU e Busybox:

tail -n5 "$(stat -c "%Y %n" ./* | 
    sort -nk1,1 | cut -d ' ' -f 2- | tail -n1)"

Isso funcionará na maioria das coisas, mas se os nomes dos arquivos puderem conter novas linhas, use-o (somente o GNU, ainda será quebrado se os arquivos terminarem em novas linhas):

tail -n5 "$(stat --printf "%Y %n
tail -n5 "$(stat -c "%Y %n" ./* | 
    sort -nk1,1 | cut -d ' ' -f 2- | tail -n1)"
" ./* | sort -rznk1,1 | sed -zn 's/[0-9]\+ //p;q')"
    
por 11.11.2014 / 17:16