Script Bash para excluir um arquivo chamado index.html recursivamente

3

Eu preciso de um script bash (não sei como escrever o arquivo .sh real) que eu poderia definir para ser executado pelo cron a cada minuto e que iria excluir arquivos com o nome index.html que estão em um diretório específico e sua subdiretórios.

Eu acredito que o comando a seguir fará isso. No entanto, eu preciso escrevê-lo como um arquivo de script que eu poderia então ter executado via cron.

find /path/to/directory -name "index.html" -print0 | xargs -0 rm -rf

O /path/to/directory seria relativo à raiz do servidor.

Minhas duas perguntas são, preciso de um / no final do caminho e como gravar o arquivo de script bash, por exemplo, em um arquivo chamado deleteindexes.sh .

Estou assumindo que precisaria definir o arquivo como um executável usando

chmod a+x deleteindexes.sh

No que diz respeito à configuração do comando cron , isso não é um problema para mim.

    
por Ali Samii 17.01.2014 / 10:08

3 respostas

9

Eu nem escrevo o script - você deve ser capaz de colocar o comando find diretamente. Você também pode chamar o comando delete diretamente de find usando o sinalizador de ação -delete.

Passo 1: editar o crontab

crontab -e

Passo 2: adicione a seguinte linha (isto será executado diariamente às 4:30 da manhã, mude ao seu gosto):

30 4 * * * find /path/to/directory -name "index.html" -delete

Etapa 3: salve e saia.

    
por 17.01.2014 / 10:25
1

Como você mencionou os caminhos relativos, imagine que, por exemplo, você deseja limpar a árvore localizada em /path/to/directory . Então os seguintes trechos vão todos conseguir o mesmo. O primeiro deles é usar argumento de caminho absoluto para find , os três restantes um relativo (relativo ao alterado para o cd precedente)

#!/bin/bash
find /path/to/directory -name "index.html" -print0 | xargs -0 rm -rf  
#!/bin/bash
cd /path || exit
find to/directory -name "index.html" -print0 | xargs -0 rm -rf  
#!/bin/bash
cd /path/to || exit
find directory -name "index.html" -print0 | xargs -0 rm -rf  
#!/bin/bash
cd /path/to/directory || exit
find . -name "index.html" -print0 | xargs -0 rm -rf  

Et voilà?

O / à direita não é importante para o comando find , a menos que /path/to/directory seja um link simbólico ou você queira receber um erro se /path/to/directory não for um diretório.

Você precisará definir o arquivo como executável.

Você acabou de responder sua própria pergunta: D

    
por 17.01.2014 / 10:12
0

Uma maneira simples, rápida e portátil é usar:

find /path/to/directory -name index.html -exec rm -f {} +

-print0 , -delete e xargs -0 são extensões do GNU.

    
por 17.01.2014 / 13:09