Encontrando um arquivo que criou X minutos atrás (sem encontrar GNU / BSD)

1

Estou usando o comando find para encontrar os arquivos que foram criados em 30 minutos.

find . -ctime -30m

Mas está dando arquivos de até 30 dias. Eu tentei -mmin também, mas está mostrando que -mmin não é uma opção válida.

O que está errado no meu comando find ?

Saída para uname -rs é AIX 2 .

    
por Aravind 25.07.2014 / 17:33

4 respostas

1

Para complementar @ resposta do JRFerguson .

Para obter um arquivo de referência cujo tempo de modificação é de 30 minutos no passado, você pode fazer portably (precisão de um segundo):

TZ=ZZZ0 touch -t "$(TZ=ZZZ0:30 date +%Y%m%d%H%M.%S)" /some/ref/file

E então faça:

find . -newer /some/ref/file

Isso só funciona para intervalos de 50 horas:

TZ=ZZZ-24:59:59 touch -t "$(TZ=ZZZ24:59:59 date +%Y%m%d%H%M.%S)" file

sendo o arquivo mais antigo que você pode obter portável (POSIXly) com esse método.

    
por 26.07.2014 / 13:45
2

O find do AIX não possui os recursos legais do GNU.

Você pode contornar isso facilmente. Crie dois arquivos de "referência" com registros de data e hora que marcam os limites de interesse:

touch -amt 201407251200 myref1
touch -amt 201407251230 myref2

Agora faça:

find . -type f \( -newer myref1 -a ! -newer myref2 \) -exec ls -ld {} +

Refere-se a mtime ou tempo de modificação de um arquivo. Este será o timestamp de criação de um arquivo se nenhuma outra modificação (escrita) foi feita, caso contrário, ele representará a última vez que uma alteração foi feita nos dados . Para diretórios, o mtime é atualizado quando novos objetos são adicionados ou os antigos são excluídos. O clássico Unix / Linux não possui um timestamp de criação verdadeiro, embora isso seja implementado (e disponível para recuperação) em certas plataformas. (veja mais aqui . Os usuários do MAC OS podem usar 'ls -lU 'para obtê-lo.

Não confunda ctime com "criação". O ctime da estrutura stat () representa o último registro de data e hora de alterações de inode (ou seja, permissões, propriedade e o nome do objeto).

    
por 25.07.2014 / 18:34
1

Você deve usar -cmin . De man página de find ,

   -cmin n
          File’s status was last changed n minutes ago.

   -ctime n
          File’s status was last changed n*24 hours ago.  See the comments for -atime to understand how rounding affects the  interpreta-
          tion of file status change times.
    
por 25.07.2014 / 17:37
0

Você pode usar perl :

#! /usr/bin/perl

use strict;
use warnings;
use File::Find ();
use File::stat;

use vars qw(*name);
*name   = *File::Find::name;
my $now = time;

File::Find::find({wanted => \&wanted}, '.');

sub wanted {
    print "$name\n" if stat($_)->mtime > ($now - 30*60)
                    and $name ne ".";
}

Exceto OSX ou FreeBSD (use ls -U ), você não pode obter a data de criação de um arquivo.

Se você estiver em ext2/3/4 filesystems, você pode usar debugfs para obter data de criação do arquivo.

    
por 26.07.2014 / 13:12