find
sai com êxito se encontrou arquivos ou não. Sua definição de sucesso é que os parâmetros da linha de comando são válidos e não houve erros de entrada / saída. Se você quiser saber se encontrou alguns arquivos, faça-o imprimir algo e verifique se a saída não está vazia.
Se você quiser que find
imprima o nome de um arquivo que encontrar, insira -print
como uma ação. Você pode encadear várias ações (por exemplo, -print
, -exec
e -prune
apenas colocando-as uma após a outra).
find /path/to/files -type d -mtime +2 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -print -exec rm -rf {} \; -prune
Observe que você precisa de aspas ao redor do padrão passado para -name
. Caso contrário, se houver um arquivo correspondente no diretório atual, o shell expandirá esse padrão antes que find
o veja.
Se você quiser imprimir o nome de cada arquivo excluído e não apenas do diretório de nível superior de cada backup, e você estiver no Linux (mais precisamente, se você estiver usando o GNU coreutils), você pode passar o -v
flag to rm
.
Observe que o comando que você postou procura por diretórios correspondentes em todos os lugares em /path/to/files
recursivamente, não apenas no nível superior. Eu não tenho certeza se é isso que você pretendia; por exemplo, ele procuraria em backups recentes. Se você deseja apenas corresponder aos diretórios de nível superior, a maneira mais fácil é passar -maxdepth 1
e, em seguida, você não precisa de -prune
.
find /path/to/files -maxdepth 1 -type d -mtime +2 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -print -exec rm -rf {} \;
Como alternativa, você pode deixar os nomes de diretório de correspondência de shell e informar find
para nunca recorrer a nada aplicando -prune
antes de corresponder.
find /path/to/files/[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9] -prune -type d -mtime +2 -print -exec rm -rf {} \;
Mas isso resultará em um erro se não houver arquivos correspondentes ao padrão ou se houver tantos arquivos correspondentes que seus nomes combinados estourarem o comprimento máximo de uma linha de comando. A abordagem -maxdepth
não possui esses defeitos.
Se você quiser registrar quais arquivos foram excluídos, redirecione a saída para um arquivo.
{
echo "# Deletions on $(date)"
find /path/to/files -type d -mtime +2 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -print -exec rm -rf {} \; -prune
echo
} >>backup-deletions.log
Se você estiver preocupado em excluir a coisa errada, registrar o que você excluiu só informaria quando já fosse tarde demais. Você pode fazer uma exclusão por etapas movendo primeiro as coisas para uma "lixeira" e esvaziando a lixeira posteriormente.
# Move things to trash. Use whatever criteria you want.
find /path/to/files -type d -mtime +2 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /path/to/trash \; -prune
# Delete directories from the trash can if they were moved more than
# a week ago.
find /path/to/trash -mindepth 1 -maxdepth 1 -ctime +7 -exec rm -rf {} \;