Comando UNIX para excluir / remover arquivos na data de hoje

2

Eu quero remover todos os arquivos no diretório em que estou atualmente que foram criados hoje.

Portanto, se hoje for 3 de abril, a commond do UNIX que estou pedindo removerá someFile2, someFile3, someFile4 e someFile5. Este comando não removeria someFile1.

someUser@:/someDirectory$ ls -lrt
-rw-r--r--    1 someUser someUser       4242 Mar 30 12:12 someFile1.dat
-rw-r--r--    1 someUser someUser          0 Apr 03 12:12 someFile2.dat
-rw-r--r--    1 someUser someUser   42424242 Apr 03 12:12 someFile3.dat
-rw-r--r--    1 someUser someUser          0 Apr 03 12:12 someFile4.dat
-rw-r--r--    1 someUser someUser     424242 Apr 03 12:12 someFile5.dat

Meu sistema operacional é AIX.

Atualmente, estou executando os quatro comandos a seguir várias vezes para conseguir isso e isso leva muito tempo porque estou testando e preciso remover esses arquivos com frequência. Os nomes dos arquivos são sempre diferentes (os timestamps são usados nos nomes dos arquivos reais) .

rm someFile2.dat
rm someFile3.dat
rm someFile4.dat
rm someFile5.dat
    
por javaPlease42 03.04.2014 / 20:26

2 respostas

1

Você pode usar duas abordagens diferentes para responder a essa pergunta:

  • Você diz que os nomes dos arquivos contêm um registro de data e hora. Você pode remover arquivos do diretório usando uma combinação de curingas e o registro de data e hora: $ TODAYDATE='date '+%Y%m%d'' $ rm *${TODAYDATE}.dat

  • Você pode usar find com a opção -newer (é necessário usar a opção mais recente, pois o find integrado do AIX não possui tantas opções): Primeiro crie um arquivo que tenha a hora de início de quando você deseja pesquisar como mtime: %código% Encontre os arquivos que são mais novos que esse arquivo $ TODAYDATE='date '+%Y%m%d'' $ touch -m -t "${TODAYDATE}0000" /tmp/time_marker

  • Você também pode usar uma versão mais simples de $ find . -type f -newer /tmp/time_marker -exec rm {} \; : find

Isso localizará todos os arquivos feitos nas últimas 24 horas. Útil se você executar um cron job por volta das 23h59 todos os dias. No entanto, isso não responde exatamente à sua pergunta.

    
por 03.04.2014 / 21:24
0

Se você pode usar GNU findutils na máquina, então a melhor opção é esta comando para excluir arquivos no diretório atual:

find -maxdepth 1 -daystart -ctime 0 -type f -delete

Este comando mostrará o que será excluído:

find -depth -maxdepth 1 -daystart -ctime 0 -type f -exec ls -cld {} +

Sendo limitado ao comando find do AIX, você pode excluir facilmente os arquivos das últimas 24 horas:

find -maxdepth 1 -ctime 0 -type f -exec rm {} \;

Infelizmente, o utilitário find no AIX não possui a opção -daystart , o que faz com que os horários sejam comparados ao limite do dia em vez do horário atual.

Também, na verdade, ctime é o tempo de modificação do inode (não o tempo de criação), mas é a aproximação mais próxima do tempo de criação nos atributos de arquivo padrão do UNIX.

    
por 03.04.2014 / 21:24