Como obter apenas arquivos criados após uma data com ls?

97

Com o lscomando, é possível mostrar apenas os arquivos criados após uma data, hora específica ...?

Estou perguntando porque tenho um diretório com milhares de arquivos.

Eu quero ver todos os arquivos que foram criados desde ontem.

Eu uso, ls -ltrmas tenho que esperar para ver todos os arquivos ...

Existe um equivalente DIRECTORY/SINCE=datedo OpenVMS?

Luc M
fonte
1
lslista arquivos, mas não oferece muito para selecionar quais arquivos listar ou o formato de saída. Use globbing (caracteres curinga do shell) ou findquando desejar selecionar arquivos por nome ou metadados (por exemplo, data).
Gilles
3
Então, como foi o encontro com ls? Vocês dois se deram bem?
Garrett Albright
3
Com zsh:ls -1 -- *(.m-1)
don_crissti 8/08/2015

Respostas:

123

Você pode usar o findcomando para encontrar todos os arquivos que foram modificados após um determinado número de dias.

Por exemplo, para encontrar todos os arquivos no diretório atual que foram modificados desde ontem (24 horas atrás), use:

find . -maxdepth 1 -mtime -1

Observe que, para encontrar arquivos modificados antes de 24 horas atrás, você deve usar em -mtime +1vez de -mtime -1.

dogbane
fonte
3
A mesma coisa que eu teria dito. Não há razão para se limitar lsaqui, Luc.
Warren Young
14
Com o GNU find, existem outras possibilidades. -mmin 5lista os arquivos modificados nos últimos 5 minutos. -newermt "2011-02-27 13:42"lista os arquivos modificados desde a data especificada. Você pode usar em -exec ls --color -ld {} +vez de -lsobter a exibição colorida habitual (se você gosta da saída colorida ls).
Gilles
3
Observe o sinal de menos:find . -mmin -5
user7543
e -maxdepth 1 pode ser aumentada para qualquer valor n para procurar arquivos no nível subdiretório também
Anshuman
3
para mim funciona assim: encontre. -type f -newermt '15/01/2012 18:09:00'
woohoo
15
find . -type f -newermt '1/30/2017 0:00:00'

Isso encontrará todos os arquivos modificados após uma data específica.

anulabilidade
fonte
1
ls -ltr | grep "`date | awk '{print $2" "$3}'`"
Trant Batey
fonte
5
Oi Trant! Embora sua solução seja criativa na tentativa de respeitar a solicitação da pergunta para usar ls, analisar a saída de ls raramente é seguro (por exemplo, o que acontece com nomes de arquivos, incluindo novas linhas aqui?), E gostamos que as respostas não sejam apenas uma. forros, mas para explicar como eles funcionam com o máximo de detalhes relevantes.
dhag
1
Problemas: (1) No meu sistema, datediz Jun 03, mas lsdiz Jun  3, para que isso não funcione. (2) Há uma semana, a data era 27 de maio.  ls -l | grep "May 27"Encontraria arquivos modificados naquele dia, mas também arquivos modificados em 27 de maio de qualquer outro ano - e arquivos com "27 de maio" em seu nome. (E se você acha que isso é uma preocupação totalmente falso, olhar para cima “Dezembro 10” .) (3) E, se você conseguiu datedizer Jun 2, grepping para que iria encontrar Jun 20através Jun 29, mas não Jun  2(com dois espaços). ... (continua)
G-Man
1
(Continua)… (4) O OP estava usando ls -ltrpara obter os arquivos modificados mais recentemente no final da listagem. Se você está aguardando uma data, não há necessidade de fazer isso (exceto para obter os arquivos de 27 de maio de 2015 no final da listagem, após os arquivos de 27 de maio de 2014, 27 de maio de 2013 etc.). (5) No awk, print $2, $3é equivalente print $2" "$3e é muito mais fácil de ler - especialmente quando existem outros três níveis de cotação.
G-Man
ls -ltr | grep "$(date | awk '{print $2,$3}')"
SergioAraujo
0

Espero que isso funcione:

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $9}'

Aqui:

$6 indicates position of month
$7 indicates day of the month

este comando acima imprime todos os nomes de arquivos criados em 1º ou 31 de maio ou após 31 de maio

se você quiser imprimir a data também no console, tente isso

ls -ltr | awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'

Se você quiser especificar o caminho do diretório, tente isso

ls -ltr <path>| awk '$6 == "May" && $7 >=01 && $7 <= 31 {print $6"-"$7,$9}'
Rohit Nimmala
fonte
Por muitas razões, não é uma boa ideia analisar a lssaída. E nem todo mundo fala inglês :-)
Luc M