web-dev-qa-db-fra.com

shell find -delete "répertoire non vide"

J'essaie de supprimer les fichiers de sauvegarde sur mon Synology NAS plus de 30 jours. Les fichiers sont dans un répertoire qui est créé lors du téléchargement des fichiers de sauvegarde depuis mon serveur Web.
Après le téléchargement, je veux vérifier -mtime puis supprimer les anciens fichiers.

Voici le script:

#!/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

Si j'exécute ce script, il m'indique que le "répertoire n'est pas vide" et rien ne sera supprimé.

Existe-t-il un moyen simple ou une option pour supprimer tout dans le répertoire?

30
grandd

Comme @Stephen Kitt le mentionne, il s'agit en grande partie d'un doublon de find -delete ne supprime pas les répertoires non vides qui indique que vous lui dites de supprimer les répertoires, mais les répertoires ne sont pas vides (juste comme courir rm some_nonempty_directory ne fonctionne pas sans l'indicateur -r au minimum).

Cela étant dit, si vous remplacez -delete avec -exec rm -rv {} + ou -exec rm -rv {} \; alors votre script devrait supprimer le répertoire récursivement sans erreur (supprimez le drapeau v si vous ne voulez pas de sortie détaillée, après le test).

Noter la + à la fin se traduira par rm -rv file1 file2 ... tandis que l'action de \; sera rm -rv file1; rm -rv file2; ...

43
Jason Rush