
Sou muito novo em scripts bash e estou realmente preso ao método find do Ubuntu. Quero pesquisar na pasta /opt/
todas as pastas para ver se elas são anteriores a uma data específica. Se forem mais antigos, os arquivos desta pasta deverão ser removidos (e a própria pasta também). Se a data ainda for muito nova, os arquivos não deverão ser alterados.
O que tenho no código:
find $BACKUP_DIR -maxdepth 1 -mtime +$DAYS_TO_KEEP -name "*$mystring" -exec rm -rf '{}' ';'
As variáveis contêm estes valores:
BACKUP_DIR=/opt/
TESTDIR=2014-11-25-daily_testmachine
mystring=-daily_testmachine
Se a variável $DAYS_TO_KEEP
for 2, a data será 25/11/2014 e o nome da pasta será 2014-11-20-daily_testmachine
a pasta e seu conteúdo deverá ser descartado.
O que estou fazendo de errado para que find não esteja removendo/encontrando esses arquivos e pastas para remover? Não consigo encontrar o erro.
Observação:se eu executar o comando com o nome exato da string da pasta, a pasta será excluída. Então, tenho algo errado no meu formato ou nomenclatura.
find $BACKUP_DIR -maxdepth 1 -name "2014-11-20-daily_testmachine" -exec rm -rf '{}' ';'
Para deixar as coisas mais claras, fiz uma captura de tela para mostrar a configuração:
Responder1
Meu erro foi um erro lógico com -mtime
. Achei que meu script estava verificando os nomes, mas -mtime
verificando a data em que o arquivo foi criado. Então meu código final:
DAYS_TO_KEEP=2
find $BACKUP_DIR -maxdepth 1 -mtime +"$DAYS_TO_KEEP" -exec rm -rf {} \;
Eu só tive que fazer um sudo touch -d "3 days ago" /filepath/folderToRemove
para -mname
encontrar a pastaecertifique-se de que o arquivo tenha idade suficiente para ser removido. Portanto, este código final remove todas as pastas mais antigas que minha variável$DAYS_TO_KEEP