Este não é um problema. find
pré-processa partes da árvore, e quando tenta acessar arquivos já deletados, gera stderr.
Você pode simplesmente ignorar os erros, -prune
do diretório ou percorrer DFS
fassion, ou seja, um dos seguintes
/usr/bin/find /backups/ -mtime +5 -exec rm -rf {} + 2>/dev/null
/usr/bin/find /backups/ -mtime +5 -prune -exec rm -rf {} +
/usr/bin/find /backups/ -depth -mtime +5 -exec rm -rf {} +
+ pode ser usado para comandos que usam vários argumentos, então você não precisa executar mais rm do que o necessário
O problema real é com o uso de mtime
. O que eu estou supondo que você quer fazer é excluir os arquivos que não foram modificados nos últimos cinco dias. Em seguida, você deve excluir explicitamente apenas os arquivos, ou seja, um dos seguintes
/usr/bin/find /backups/ -type f -mtime +5 -exec rm -f {} +
/usr/bin/find /backups/ -type f -mtime +5 -delete
E depois você pode incluir um segundo comando find para excluir diretórios vazios, ou seja, um dos seguintes
/usr/bin/find /backups/ -mindepth 1 -type d -empty -delete
/usr/bin/find /backups/ -mindepth 1 -type d -empty -exec rm -rf {} +
O problema com a exclusão de diretórios com base no mtime é que o mtime só mudará quando os arquivos forem movidos para / do diretório. Mas ainda pode ter arquivos que foram modificados nos últimos cinco dias, apesar de ter um tempo de modificação mais antigo.