Como posso obter a lista de todos os arquivos no diretório atual, juntamente com a data da modificação e classificados por essa data?
Agora eu sei como conseguir isso com find
, stat
e sort
, mas por algum motivo estranho, o stat
não está instalado na caixa e é improvável que eu possa instalá-lo.
Alguma outra opção?
PS: gcc
também não está instalado
find
-printf
ação parece ser a mais fácil.Respostas:
Meu método mais curto usa zsh:
(adicione os
D
qualificadores glob se você também quiser listar os arquivos ocultos ou os arquivos nos diretórios ocultos).Se você encontrar o GNU, faça-o imprimir os tempos de modificação do arquivo e classifique-os de acordo com isso. Suponho que não haja novas linhas nos nomes dos arquivos.
Se você possui o Perl (novamente, assumindo que não há novas linhas nos nomes dos arquivos):
Se você possui Python (novamente, assumindo que não há novas linhas nos nomes dos arquivos):
Se você tiver acesso SSH a esse servidor, monte o diretório sobre sshfs em uma máquina melhor equipada:
Com apenas as ferramentas POSIX, é muito mais complicado, porque não há uma boa maneira de encontrar o tempo de modificação de um arquivo. A única maneira padrão de recuperar os horários de um arquivo é
ls
e o formato de saída depende da localidade e é difícil de analisar.Se você pode gravar nos arquivos e se preocupa apenas com os arquivos regulares, e não há novas linhas nos nomes dos arquivos, aqui está um argumento horrível: crie links físicos para todos os arquivos em um único diretório e classifique-os por tempo de modificação.
fonte
find . -print | xargs -n99999 -s999999 ls -ltr
. Mas isso tem o problema de que (1)xargs
não pode permitir-m
maior que 512 ou-s
maior que 5120 e (b) mesmo que você possa contornar isso, ainda existe um tamanho máximo imposto pela kernel da lista de argumentos e do ambiente combinados. A maioria das suas idéias (exceto as do Perl e Python) tem o mesmo problema, razão pela qual evitei especificamente a construção de longas linhas de comando.zsh
globs recursivos no caso geral.print -rl **/*
, o único limite é a quantidade de memória livre que você possui) e além disso existezargs
. Sua proposta defind … | xargs … ls
será classificada corretamente sexargs
acabar invocandols
apenas uma vez e não funcionará se houver caracteres especiais nos nomes dos arquivos.Assumindo o GNU
find
:Mude
1n,1
para1nr,1
se você deseja que os arquivos listados mais recentes primeiro.Se você não possui o GNU
find
, fica mais difícil porquels
o formato do carimbo de data / hora varia muito (arquivos modificados recentemente têm um estilo diferente de carimbo de data / hora, por exemplo).fonte
ls --time-style="..."
- não tenho certeza se isso é padrão ou GNU ls, provavelmente GNU.ls
não possui essa opção.Em um mac, não há argumento -printf para encontrar, mas você pode fazer isso:
find . -print0 | xargs -0 -n 100 stat -f"%m %Sm %N" | sort -n|awk '{$1="";print}'
fonte
pode-se tentar isso (é preciso construir por conta própria) https://github.com/shadkam/recentmost
fonte
Ignorando arquivos ocultos - com carimbo de tempo agradável e rápido
Lida bem com espaços nos nomes de arquivos - não que você deva usá-los!
find
Pode encontrar mais abundância seguindo o link.fonte
Falando geralmente de encontrar arquivos por data (isso não funcionará para o pôster original, mas eu acabei aqui, então achei que outros poderiam também). No meu caso de uso, desejo listar os arquivos com a finalidade de revisá-los antes da exclusão.
Com o findutils 4.6.0, eu gosto de:
O comando acima localiza arquivos (
-type f
), no diretório de trabalho atual (.
) que foram modificados há mais de 270 dias atrás (-mtime +270
também-mtime 0
produzirá as últimas 24 horas e-mtime -5
mostra os últimos 5 dias). Em seguida, ele é usadols
para listá-los por data, o mais novo primeiro (-exec ls -laFGht --time-style=iso {} \+
)Aqui está uma amostra da saída:
O melhor disso é que, uma vez que a lista tenha sido revisada, é simples substituir a parte da lista pelo
find
comando delete:fonte