Encontre arquivos com mais de 15 segundos, mas com mais de 2 segundos

17

Quero encontrar arquivos com mais de 15 segundos, mas com mais de 2 segundos. Aqui está o script que estou usando atualmente que agarra arquivos com mais de 15 segundos:

find /my/directory -name '*.jpg' -not -newermt '-15 seconds'

Qualquer ajuda é muito apreciada

Yllier123
fonte
2
Qual sistema operacional você está usando? Existem diferenças nas findimplementações.
terdon
Um arquivo modificado exatamente 2 segundos atrás deve corresponder? Que tal um arquivo modificado exatamente 15 segundos atrás?
26615 Mikel
Mais recente que 2 segundos no momento em que o script inicia ou no final dele?
Stéphane Chazelas
@ Mikel, isso provavelmente é irrelevante, pois os relógios têm resolução em nanossegundos hoje em dia.
Stéphane Chazelas 26/10/2015
11
Ok ... já que ninguém mais está perguntando ... @ Yllier123 por que você precisa encontrar arquivos criados entre 2 <x <15 s? Eu só estou curioso.
C # Bauer #

Respostas:

17

Você pode combinar vários predicados encadeando-os.

Não há -oldermt, mas você pode escrever isso como -not -newermt.

Você quer:

  • -newermt '-15 seconds' dizer que o arquivo tem menos de 15 segundos e
  • -not -newermt '-2 seconds' para dizer que o arquivo tem mais de 2 segundos

Experimentar:

find /my/directory -newermt '-15 seconds' -not -newermt '-2 seconds'

Ou, para ser compatível com POSIX:

find /my/directory -newermt '-15 seconds' \! -newermt '-2 seconds'

Além disso, apenas para você (e outros leitores) estarem cientes, "mais novo" significa modificado mais recentemente que, não criado mais recentemente que.

Mikel
fonte
3
Agradável. Observe que -not -newermt '-2 seconds'também corresponderá aos arquivos com exatamente 2 segundos de idade. Use -not -newermt '3 seconds'para excluir esses também.
terdon
11
Sim, os casos extremos são sempre divertidos. Na verdade, não tenho certeza de qual resolução ele usa para essas comparações. Meu pressuposto é que qualquer coisa que tenha sido modificada ~ 2.000000001 segundos atrás é uma correspondência, mas isso também depende do seu sistema de arquivos e sistema operacional.
Mikel
Bom ponto, não tenho idéia de qual é a resolução. Acabei de testar touch -d "2 seconds ago" file; find . -newermt '-15 seconds' -not -newermt '-2 seconds'e consegui file.
terdon
@terdon Bem, isso depende se os timestamps têm uma resolução mais precisa do que um segundo; isso dependerá do sistema, do sistema de arquivos e poderá até variar entre os arquivos no mesmo sistema de arquivos, se for usado por várias máquinas diferentes.
Blacklight Shining
"mais recente" significa "mais recentemente que". É o "m" que significa "modificado".
precisa saber é o seguinte
4

Você não mencionou o seu sistema operacional ....

Isso funciona bem com uma implementação moderna de localização, como a do FreeBSD ou com sfind.

find /my/directory -name '*.jpg' -mtime -15s -mtime +2s

Sfind faz parte das ferramentas Schily: http://sourceforge.net/projects/schilytools/files/

AVISO: Acabei de descobrir um problema no sfind. Se os -mtimeargumentos forem inferiores a 60s, ele não funcionará corretamente, pois os horários do arquivo são atualmente comparados com um carimbo de data / hora de 60 segundos no futuro que foi originalmente calculado para a opção de ano -ls.

BTW: -notnão pertence find, é um GNUism não portátil.

esperto
fonte
11
Existe a bashtag ... Portanto, o ambiente poderia ser Cygwin, o Debian GNU / Hurd, bashem execução em FreeBSD ou Solaris, ... ;-)
PHK
Para o GNU find, parece que os decimais, embora loucos, podem ser usados ​​como solução alternativa.
Arthur2e5
A localização do POSIX possui !for -not como! expression . Então, não é grande coisa.
@phk É por isso que eu mencionei o método que funciona com um padrão avançado primaryde findinformar as pessoas de que não há necessidade de sempre adicionar nova primariespara encontrar para ser capaz de melhorar a funcionalidade. Entre: Um fixo libfindfoi publicado no schily tools.
schily 27/10/2015
@BinaryZebra, o problema é que gfindele adicionou o -notalias. Isso nunca foi necessário e sua presença pode ser vista como um bloqueio na estratégia do fornecedor.
schily 27/10/2015