Estou na pasta raiz e preciso encontrar os últimos 10 arquivos modificados apenas desta pasta. Cada vez que coloco -mtime como meu professor disse, recebo 10 dias. Preciso dos últimos 10 arquivos modificados, não dos últimos 10 dias. Eu tentei encontrar meu tempo, meu tempo canalizado com cauda. Recebo uma longa lista de todos os arquivos modificados nos últimos 10 dias. Preciso apenas dos últimos 10 arquivos modificados do diretório raiz.
Responder1
ls -t | head
deve funcionar, desde que os nomes dos arquivos não incluam novas linhas.
ls -t
classifica por tempo, com os arquivos mais recentes primeiro. head
mantém apenas as 10 primeiras linhas.
Se quiser mais detalhes, você pode usar ls -lt
, mas isso precede uma linha extra com o tamanho total, então você precisa de ls -lt | head -n 11
.
Se quiser incluir arquivos ocultos, você pode usar ls -At | head
. ( ls -A
, ou --almost-all
para GNU ls, inclui arquivos ocultos, exceto .
e ..
.)
Observe que isso fornece os 10 arquivos mais recentes de qualquer tipo, incluindo diretórios, não apenas arquivos normais.
Responder2
Em zsh
, para os 10 arquivos regulares no diretório de trabalho atual ou abaixo que foram modificados pela última vez:
ls -ldt -- **/*(D.om[1,10])
Em outros shells, mas supondo que você esteja em um sistema GNU recente:
find . -type f -printf '%T@:%P\0' |
LC_ALL=C sort -zrn |
LC_ALL=C sed -z 's/^[^:]*://;10q' |
xargs -r0 ls -ltd --
Se você não quiser considerar arquivos em subdiretórios, remova **/
in zsh
ou -maxdepth 1
adicione find
after .
.
Para excluir arquivos ocultos, remova o D
qualificador glob zsh
ou altere a find
linha para:
LC_ALL=C find . -name '.?*' -prune -o -type f -printf '%T@:%P\0' |
Ou se também excluir arquivos em subdiretórios:
LC_ALL=C find . -maxdepth 1 ! -name '.*' -type f -printf '%T@:%P\0' |
Eles não fazem suposições sobre quais caracteres ou não caracteres os caminhos dos arquivos podem conter.