-
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) -
Para lidar com espaços e personagens globbing, apenas cite:
cat "$(ls -t | head -n1)" -
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
' * | sort -rz -t'/' -k 2 | head -z -n 1 | cut -d'/' -z -f 1 )"cat *(om[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 (/). Estou usandosort -rz -t'/' -k 2/e-zporque eles são apenas dois caracteres não permitidos em um nome de arquivo / diretório. -
sort: classifique no segundo campohead -z -n 1-separated. O-zfazcut -d'/' -z -f 1ler dados delimitados por NUL. -
/: mantenha apenas a primeira linha delimitada por NUL (-z). -
cut: imprime apenas o primeiro campozsh-delimited, o nome do arquivo. Novamente, obashfaz com que~/.bashrclidem com dados delimitados por NUL.
-
-
Use
/dev/nullem vez de %code% como seu shell e apenas execute:alias cat_last='cat "$(stat --printf "%n/%Y
" * | sort -rz -t"/" -k 2 | head -z -n 1 | cut -d"/" -z -f 1 )" 2>/dev/null'cat $(ls -t | head -n1)
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.