Como uso o comando UNIX find
para procurar arquivos criados em uma data específica?
Como uso o comando UNIX find
para procurar arquivos criados em uma data específica?
Respostas:
Como apontado por Max, você não pode, mas a verificação de arquivos modificados ou acessados não é tão difícil. Eu escrevi um tutorial sobre isso, ainda hoje. A essência do qual é usar -newerXY
e ! -newerXY
:
Exemplo: para encontrar todos os arquivos modificados em 7 de junho de 2007:
$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08
Para encontrar todos os arquivos acessados em 29 de setembro de 2008:
$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30
Ou arquivos com permissão alterada no mesmo dia:
$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30
Se você não alterar as permissões no arquivo, 'c' normalmente corresponderia à data de criação.
-newerBt
corresponderá ao horário de nascimento (criação) do arquivo .
-newerxt
está disponível no FreeBSD desde 2001 (onde foi fornecido pela primeira vez como patch em 1998), alguns outros BSDs e GNU encontram (desde 4.3.3 em 2007), com base no HP / UX find, que foi introduzido -newerXY
(mas onde Y == t não é suportado).
find location -ctime time_period
Exemplos de time_period:
Há mais de 30 dias: -ctime +30
Menos de 30 dias atrás: -ctime -30
Exatamente há 30 dias: -ctime 30
ctime
não tem nada a ver com o tempo de criação , é o tempo de mudança do inode.
São duas etapas, mas eu gosto de fazer desta maneira:
Primeiro, crie um arquivo com uma data / hora específica. Nesse caso, o arquivo é 01/10/2008 à meia-noite
touch -t 0810010000 /tmp/t
Agora podemos encontrar todos os arquivos mais recentes ou mais antigos que o arquivo acima (passando pela data de modificação do arquivo. Você também pode usar -anewer para o status do arquivo acessado e -cnewer alterado).
find / -newer /tmp/t
find / -not -newer /tmp/t
Você também pode procurar arquivos entre determinadas datas criando dois arquivos com toque
touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2
Encontrará arquivos entre as duas datas e horários
find / -newer /tmp/t1 -and -not -newer /tmp/t2
find
que carece-newerXY
Você pode fazer isso:
find ./ -type f -ls |grep '10 Sep'
Exemplo:
[root@pbx etc]# find /var/ -type f -ls | grep "Dec 24"
791235 4 -rw-r--r-- 1 root root 29 Dec 24 03:24 /var/lib/prelink/full
798227 288 -rw-r--r-- 1 root root 292323 Dec 24 23:53 /var/log/sa/sar24
797244 320 -rw-r--r-- 1 root root 321300 Dec 24 23:50 /var/log/sa/sa24
stat
se você não tiver find -printf
.
Você não pode. A opção -c informa quando as permissões foram alteradas pela última vez, -a testa o tempo de acesso mais recente e -m testa o tempo de modificação. O sistema de arquivos usado pela maioria dos tipos de Linux (ext3) não suporta um registro de "tempo de criação". Desculpe!
@ Max: está certo sobre o momento da criação.
No entanto, se você quiser calcular o argumento dias decorrido para um dos -atime
, -ctime
, -mtime
parâmetros, você pode usar a seguinte expressão
ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
Substitua "2008-09-24" pela data desejada e ELAPSED_DAYS será definido como o número de dias entre então e hoje. (Atualização: subtraia uma do resultado para alinhar com find
o arredondamento da data.)
Portanto, para encontrar qualquer arquivo modificado em 24 de setembro de 2008, o comando seria:
find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
Isso funcionará se a sua versão do find
não suportar os -newerXY
predicados mencionados na resposta do @Arve :.
Encontrei este scriplet em um script que exclui todos os arquivos com mais de 14 dias:
CNT=0
for i in $(find -type f -ctime +14); do
((CNT = CNT + 1))
echo -n "." >> $PROGRESS
rm -f $i
done
echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG
Eu acho que um pouco mais de "man find" e procurar os parâmetros -ctime / -atime etc. ajudarão você aqui.