shell find -delete “diretório não vazio” [duplicado]

15

Eu tento excluir arquivos de backup no meu Synology NAS com mais de 30 dias. Os arquivos estão em um diretório criado durante o download dos arquivos de backup do meu servidor da Web.
Após o download, quero verificar -mtime e depois excluir os arquivos mais antigos.

Aqui vem o roteiro:

#!/bin/sh

## Datum auslesen
datum='date +%Y-%m-%d_%H-%M'

## Mit wget die Datei AutoBackupDB-1.zip laden und in einem Ordner mit Datum uns Uhrzeit speichern 
wget -m -P /volume1/Austauschordner/backup_xyz/$datum/ ftp://backup:[email protected]/AutoBackupDB-1.zip
echo "Backup von xyz wurde erstellt! "

## finde alle Ordner in einem angegebenen Verzeichnis mit dem Suchnamen die älter als die angegebenen Tage sind und lösche diese
find /volume1/Austauschordner/ -type d -name 'backup_*' -ctime +30 -delete

Se eu executar este script, ele me diz que o "diretório não está vazio" e nada será excluído.

Existe uma maneira fácil ou uma opção para excluir tudo no diretório?

    
por grandd 15.12.2015 / 15:48

1 resposta

22

Como menciona @Stephen Kitt, isso é basicamente uma duplicata de find -delete não exclui diretórios não vazios , o que indica que você está dizendo para excluir diretórios, mas os diretórios não estão vazios (assim como executar rm some_nonempty_directory não funciona sem o sinalizador -r no mínimo).

Dito isso, se você substituir -delete por -exec rm -rv {} + ou -exec rm -rv {} \; , seu script deverá excluir o diretório recursivamente sem erro (remova o v flag se não desejar saída detalhada após o teste).

Observação: o + no final resultará em rm -rv file1 file2 ... , enquanto a ação de \; será rm -rv file1; rm -rv file2; ...

    
por 15.12.2015 / 16:10