como abrir o último arquivo de texto criado?

1

Eu sei como usar cat para abrir rapidamente um arquivo, mas um dos meus programas gera alguns arquivos de log com nomes super longos / estranhos e digitar -ls para descobrir que o nome não é eficiente.

Como posso abrir o último arquivo de texto que acabei de criar em uma pasta?

Obrigado!

    
por ℕʘʘḆḽḘ 29.06.2017 / 14:33

1 resposta

2
  1. O caso simples. Se você sabe que seus nomes de arquivo são são (sem espaços, globbing caracteres, newlines etc), você pode apenas fazer:

    cat $(ls -t | head -n1)
    
  2. Para lidar com espaços e personagens globbing, apenas cite:

    cat "$(ls -t | head -n1)"
    
  3. Se os nomes dos seus arquivos forem arbitrários e você precisar fazer isso funcionar para qualquer nome do arquivo, incluindo aqueles com novas linhas no nome, use:

    cat "$(stat --printf '%n/%Y
    cat *(om[1])
    
    ' * | sort -rz -t'/' -k 2 | head -z -n 1 | cut -d'/' -z -f 1 )"

    Explicação

    • stat --printf '%n/%Y/' : imprime o nome do arquivo e sua data de modificação ( em segundos desde a época ), separados por / e depois um NUL ( sort -rz -t'/' -k 2 ). Estou usando / e -z porque eles são apenas dois caracteres não permitidos em um nome de arquivo / diretório.
    • sort : classifique no segundo campo head -z -n 1 -separated. O -z faz cut -d'/' -z -f 1 ler dados delimitados por NUL.
    • / : mantenha apenas a primeira linha delimitada por NUL ( -z ).
    • cut : imprime apenas o primeiro campo zsh -delimited, o nome do arquivo. Novamente, o bash faz com que ~/.bashrc lidem com dados delimitados por NUL.
  4. Use /dev/null em vez de %code% como seu shell e apenas execute:

    alias cat_last='cat "$(stat --printf "%n/%Y
    cat $(ls -t | head -n1)
    
    " * | sort -rz -t"/" -k 2 | head -z -n 1 | cut -d"/" -z -f 1 )" 2>/dev/null'

Você pode definir qualquer um deles (de preferência 3, pois é o mais robusto) como um alias, adicionando essa linha ao seu %code% :

cat "$(ls -t | head -n1)"

Eu adicionei o %code% porque no meu sistema o shell reclama sobre um byte NUL estar na entrada. Isso não bloqueia o comando e não há motivo para continuar vendo o erro.

    
por terdon 29.06.2017 / 14:46