Encontre todos os arquivos com mais de um minuto

8

Como posso usar findpara selecionar arquivos que foram gravados e não modificados no último minuto?

Sei que posso fazer o contrário, encontrar arquivos modificados nos últimos 60 segundos com -mtime -60s, mas quero os que não foram modificados nos últimos 60 segundos.

Eu uso o Linux e recebo esse erro se eu usar segundos:

find ??/ -mtime +60s -name blah.tsv
find: invalid argument `+60s' to `-mtime'
719016
fonte

Respostas:

13

Usar find /path -type f -mtime +60s

O -pouco antes dos dígitos não é um "traço de argumento" regular, mas significa "menor que". +então é "mais que".

De man find:

Todas as primárias que usam um argumento numérico permitem que o número seja precedido por um sinal de mais (`` + '') ou um sinal de menos (`` - ''). Um sinal de adição anterior significa `` mais que n '', um sinal de menos precedente significa `` menor que n '' e nenhum significa `` exatamente n ''.

Note-se que para exatamente n , o tempo é arredondado. Então 1(1 dia) não significa 86400 segundos.

Daniel Beck
fonte
2
Estritamente falando, +60não é o oposto de -60, pela mesma razão menor que não é o oposto de maior que : Ambos excluem o valor exato com o qual se comparam. Mas sua pergunta não indica exatamente qual comportamento você deseja.
Daniel Beck
Isso não é exatamente o mesmo, de fato! reverte a "consulta" original. Mas concordou que o OP não especifica o que ele deseja.
Karolos
No dia seguinte, o OP declarou que está no Linux, não no Mac OS X. Se isso mudasse a resposta, você pode atualizá-la?
Peter Mortensen
11
Sim, isso não funciona no Linux. Pelo menos RHEL 5.6. A resposta do SiegeX abaixo funciona, no entanto.
precisa saber é o seguinte
2
Isso não funciona no CentOS. Como supostamente funciona no Mac OS X
trante
14
find . -type f -mmin +1

Exemplo

$ ls *
four.txt  one.txt  three.txt  two.txt

$ touch foo && find . -mmin +1
.
./three.txt
./four.txt
./two.txt
./one.txt
SiegeX
fonte
Não está mais marcado com osx.
Peter Mortensen
4

O segundo -no -mtime -60sé não um delimitador de opção.

-mtimeé uma opção e é seguido por um argumento de opção . O argumento de opção é -60s, e o elemento -faz parte do próprio argumento de opção, não um delimitador de opção. Significa "menos de 60 segundos". Argumentos de opção 60se +60ssignificam "igual a 60 segundos" e "maior que 60 segundos", respectivamente.

O manual do Apple MacOS e o manual do FreeBSD mencionam os prefixos +e -em exatamente um lugar e esquecem de explicar em qualquer lugar o que são. Isto é o que eles são.

(O manual GNU Info para GNU findtem a mesma omissão, curiosamente. No entanto, finda sintaxe do GNU por vezes é um pouco diferente da findsintaxe BSD e MacOS .)

Leitura adicional

JdeBP
fonte
11
É ainda pior do que apenas explicá-lo em um único local : todas as outras opções se referem ao atimeformato da hora, mas isso também não explica os prefixos . É uma seção separada que não é referenciada.
Daniel Beck
De fato; e você verá que eu escrevi isso. Eu escrevi "mencione" e "esqueça de explicar em qualquer lugar". ☺
JdeBP
Eu não pretendia contradizê-lo, só queria salientar que o local exato é também o pior possível de um ponto de vista "vamos apenas dar uma olhada na página de manual".
Daniel Beck
Mas isso não é explicado em exatamente um lugar. Não está explicado em nenhum lugar. Para um conjunto de páginas de manual geralmente escritas e editadas razoavelmente bem, na minha experiência, é uma omissão surpreendente.
JdeBP
11
Heh! Isso porque você já sabe a resposta magicamente e pode conectar os dois ao ler o documento, preenchendo o que não está realmente escrito. As pessoas que não têm (y) nosso conhecimento prévio e estão lendo o manual para descobrir precisam se perguntar por que não há explicação sobre o que é um "modificador". ☺
JdeBP
3

Você deve poder usar

find . ! -mtime -60s
Karolos
fonte
11
Requer parênteses para mim:find . !( -mtime -60s )
Der Hochstapler 27/01
@ OliverSalzburg: No meu Mac, ele funciona bem sem parênteses (Darwin Kernel Versão 11.2.0).
Karolos
1

Nos sistemas Unix, o tempo costumava ser seguido de um +/- seguido de um número seguido de unidades de tempo. [+ -] nn [dms]

O Linux usa mtime por dias, mmin por minutos, mas não parece haver uma opção de segundos e não usa um especificador de unidades de tempo. O + ou - ainda se refere a maior ou menor que o tempo, em vez de ser um argumento de opção, como mencionado acima.

Você pode usar -mmin 1, mas /unix/238738/find-files-newer-than-15-seconds-but-older-than-2-seconds discute como manipular segundos em geral .

Nick Greenwood
fonte