Posso desvincular em perl com uma lista de um comando unix find?

1

Tentando excluir milhares de arquivos em vários servidores.
rm não funcionará.
Escreveu um script genérico para ser executado a partir de cron para excluir regularmente:

...  
/bin/perl -e 'unlink ( <'find ${DIRECTORY} -name "*.${FILETYPE}" -type f -mtime +${DELETE_OLDER_THAN}'> ) or die "Nothing deleted\n" ' >> ${REMOVAL_LOGFILE} 2>&1  
...  

Quero ser muito específico sobre o que estou excluindo.
Estou usando perl porque parece ser mais rápido que -exec rm {} : /
find é permitido neste contexto?

    
por Marinaio 07.06.2017 / 21:04

1 resposta

4

Se o seu find suportar a ação -delete , você encontrará isso o mais rápido possível sem gerar vários processos de exclusão:

find "$DIRECTORY" -name "*.$FILETYPE" -type f -mtime +"$DELETE_OLDER_THAN" \
    -delete -print >> "$REMOVAL_LOGFILE" 2>&1

Você verá que -exec rm {} \; é lento porque cria um novo processo para cada operação de exclusão. Se seu find o tiver, -exec rm {} + seria mais rápido porque criaria um processo rm para um número considerável de arquivos. Mas o mais rápido de todas as soluções single-threaded seria -delete .

Com um pouco mais de complexidade, você poderia distribuir um find .. -delete process por diretório, em uma árvore de diretórios, e ter (pelo menos alguns) executados em paralelo. Mas eu não sei quantos diretórios você está processando, então não posso determinar se isso seria um ganho líquido.

    
por 08.06.2017 / 01:18

Tags