Use o comando find assim:
find . -name "*.txt" -mtime -60s
Para encontrar todos os arquivos *.txt
modificados nos últimos 60 segundos.
Gostaria que um comando do Linux localizasse arquivos alterados no último n
segundos.
Existe um script de shell ou outra ferramenta que eu possa executar a partir da interface de linha de comando ou GUI?
Use o comando find assim:
find . -name "*.txt" -mtime -60s
Para encontrar todos os arquivos *.txt
modificados nos últimos 60 segundos.
A solução com mtime especificando segundos não funciona nos meus sistemas linux que usam find --version
== find (GNU findutils) 4.4.2
.
Eu recebo o seguinte erro:
mycomputer:~/new$ find . -mtime -60s
find: missing argument to '-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to '-mtime'
No entanto, posso usar -mmin
(para modificado nos últimos m minutos) e ele pode receber um argumento decimal; Por exemplo, os seguintes arquivos de localização foram modificados nos últimos 30 segundos.
find . -mmin 0.5
Então, por exemplo; criando arquivos modificados pela última vez nos últimos 1s, 6s, 11s, ... nos últimos 120 segundos, este comando encontra:
mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago
Então, se você realmente precisar em segundos, pode fazer algo como:
localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago
Semelhante ao que Glenn sugeriu, se você quiser encontrar tudo modificado, digamos, no tempo durante o qual o processo de instalação estava em execução, talvez seja mais fácil fazer algo como:
touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint
Então você não precisa fazer o cálculo do tempo; você acabou de encontrar coisas alteradas após o arquivo do ponto de verificação.
Se você tem uma versão de pesquisa que não suporta -mtime -60s
, então uma solução melhor é
touch -d '-60 seconds' /tmp/newerthan
find . -name "*.txt" -newer /tmp/newerthan
A maneira mais simples de fazer isso é:
find . -name "*.txt" -newermt '6 seconds ago'
A opção -mtime -60s
, mencionada em uma resposta, não funciona em muitas versões de find
, mesmo em 2016. -newermt
é uma opção muito melhor para nós. Pode analisar muitos formatos diferentes de data e hora.
Um método alternativo usando mmin
é este:
find . -name "*.txt" -mmin -0.5
# Finds files modified within the last 0.5 minute, i.e. last 30 seconds
Esta opção pode não funcionar para todas as versões find
.
Se você estiver monitorando um diretório em busca de alterações nos arquivos, provavelmente desejará usar inotify-tools em vez de algum ciclo de pesquisa infinito.
Se a sua versão de find
não aceitar segundos ou valores reais, assim como o meu, use -mmin
, mas especifique 0, e todos os arquivos serão modificados em menos de um minuto:
$ touch test; find . -type f -mmin 0
./test