Você pode usar find
. Calcular data de acordo com sua exigência e uso,
find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -print
Depois de confirmar, exclua-os,
find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -delete
como excluir os arquivos criados em Aug 7
com o nome DBG_A_sql*
em /tmp
como o exemplo a seguir:
-rw-r--r-- 1 root root 51091 Aug 7 11:22 DBG_A_sql.2135
-rw-r--r-- 1 root root 15283 Aug 7 11:22 DBG_A_sql.2373
-rw-r--r-- 1 root root 51091 Aug 7 11:22 DBG_A_sql.2278
-rw-r--r-- 1 root root 9103 Aug 7 11:22 DBG_A_sql.2485
-rw-r--r-- 1 root root 9116 Aug 7 11:22 DBG_A_sql.2573
-rw-r--r-- 1 root root 9140 Aug 7 11:22 DBG_A_sql.2679
-rw-r--r-- 1 root root 15695 Aug 7 11:22 DBG_A_sql.2897
Para começar, encontrar arquivos criados em um determinado momento é um pouco difícil, uma vez que o tempo de criação não é normalmente salvo em qualquer lugar ou é difícil de alcançar. O que você tem é mtime
, ou a hora da última modificação, e ctime
, que é a hora da "alteração", atualizada em qualquer alteração no inode. Eu suponho que você quer o tempo de modificação.
Encontrar arquivos modificados em uma determinada data revelou-se um pouco interessante, já que find
parece dificultar um pouco o processo de criar arquivos exatamente na meia-noite.
Se soubermos o tempo relativo (ou seja, ontem), poderíamos usar
find -daystart -mtime 1
, mas encontra o arquivo modificado na meia-noite errada, Aug 8 00:00
. No entanto, isso parece funcionar:
find dir/ -daystart -mtime +0 \! -mtime +1 -ls
Se não quiser calcular o tempo relativo, e seu find
tem -newerXY
:
find dir/ -newermt 'Aug 7 00:00' \! -newermt 'Aug 8 00:00' -ls
Novamente, isso cria os arquivos exatamente à meia-noite, porque a comparação é "mais recente", não "mais recente ou antiga". Porém, se o seu sistema tiver uma precisão de subsegundo para registros de data e hora, pode ser difícil atingir isso, mas acontece se você testar arquivos criados por touch
...
Uma solução alternativa para isso seria algo assim:
find dir/ -newermt 'Aug 6 23:59:59.999999999' \! -newermt 'Aug 7 23:59:59.999999999' -ls
Em qualquer caso, adicione o -name "DBG_A_sql*"
necessário para obter apenas os arquivos com o nome correto. Você pode substituir o -ls
no final com -delete
para excluir os arquivos em vez da listagem. ( -ls
, -delete
e -newerXY
existem pelo menos no GNU find e o BSD encontra no OS X.)
É claro que você poderia realmente analisar a representação de texto da data, mas ls
torna difícil acertar se algum joker criar arquivos com caracteres não imprimíveis neles. Claro, os arquivos de exemplo não têm tal coisa, mas em geral, qualquer um poderia criá-los, especialmente em /tmp
.
(Embora com | xargs rm
você só perderia esses arquivos, e como os nomes dos arquivos não podem conter barras, seria difícil alguém apontar seu rm
para outro diretório.)
Apenas o laço bash
for file in /tmp/DBG_A_sql* ; do
[ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done
Assumindo que por criado , você quer dizer última modificação (que é a hora reportada por ls -l
), com zsh
:
autoload age # best in ~/.zshrc
rm /tmp/DBG_A_sql*(e:age 2016-08-07:)