Synology [Tuto] Vider les fichiers de + de 7j d'un dossier Transfert

FTP

Chevalier Jedi
4 Septembre 2017
220
6
18
Sur un NAS, il arrive couramment de paramétrer un répertoire pour servir d'espace de transfert de données entre les différents utilisateurs. Ces données sont généralement des fichiers qu'un utilisateur a sur son ordinateur, qu'il veut transmettre à un autre utilisateur mais qui sont trop gros pour être attachés en pièce jointe d'un email. Du coup, il a la possibilité de déposer une copie dans un dossier généralement appelé "Transfert", copie que le(s) destinataire(s) peuvent venir chercher et récupérer sur leur(s) ordinateur(s).

Problème, ce genre de répertoire se rempli généralement très vite car les utilisateurs déposent leurs fichiers & dossiers à transférer, les destinataires les récupèrent mais bien souvent sans les supprimer du répertoire de transfert et ensuite plus personne ne fait le ménage. Et donc au fil des jours, ça grossit, ça grossit, jusqu'à remplir le quota du disque.

Une solution (parmi bien d'autre) consiste à fixer une règle et à faire faire le ménage automatiquement.
Exemple : j'ai personnellement fixé comme règle que dans le dossier Transfert, on a une semaine pour récupérer et supprimer les fichiers déposés. A défaut, ils sont automatiquement supprimés par le NAS.
C'est simple, pas aussi stricte qu'un vidage du répertoire toutes les nuits, mais efficace.

Maintenant, reste plus qu'à le mettre en œuvre :p
Pour ce faire, rien de plus simple. DSM a l'outil pour le mettre en œuvre en 2mn.

Procédure
  • Panneau de configuration > Planificateur de tâches
  • Créer > Tâche planifiée > Script défini par l'utilisateur
    DSM6_tache_empty_transfer_01.PNG
  • Paramétrer les champs suivant puis cliquer sur [OK]...
    • Onglet Général
      - Tâche : Nettoyage de Transfert
      - Utilisateur : root
      DSM6_tache_empty_transfer_02.PNG
    • Onglet Programmer
      - Exécuter les jours suivants : Quotidienne
      - Première heure d'exécution : 04:00
      DSM6_tache_empty_transfer_03.PNG
    • Onglet Paramètres de tâche
      - Optionnel : cocher "Envoyer les détails d'exécution par e-mail" puis saisir l'adresse email
      - Script défini par l'utilisateur : exemple de code à personnaliser (cf. ci dessous)...
      Code:
      printf "\nFichiers supprimés aujourd'hui..."
      printf "\n(vieux de plus d'une semaine)\n"
      find /volume1/Transfert -mindepth 1 -maxdepth 1 ! -user root -ctime +6 -execdir rm -rf {} + -print
      printf "\nFichiers à supprimer demain...\n"
      find /volume1/Transfert -mindepth 1 -maxdepth 1 ! -user root -ctime +5 -print
      DSM6_tache_empty_transfer_04.PNG


Explications & personnalisation du script
  • [c]printf "votre texte"[/c] : Insert une ligne d'explication dans la notification par email envoyée par le NAS.
    Les 3 lignes printf sont inutiles si vous n'activez pas de notification par email !
  • [c]\n[/c] dans le texte : Insert un saut de ligne
  • [c]find /volume1/Transfert[/c] : Fait la liste de tous les fichiers & répertoires dans le répertoire "/volume1/Transfert"
    Vous devez personnaliser ce chemin pour indiquer l'emplacement de VOTRE dossier à nettoyer
  • [c]mindepth 1[/c] : Ne liste que les fichiers & répertoires au minimum 1 niveau au-dessus du répertoire racine ; donc ne liste pas le répertoire "Transfert" lui-même
  • [c]maxdepth 1[/c] : Ne liste que les fichiers & répertoires au maximum 1 niveau au-dessus du répertoire racine ; donc ne liste que les fichiers & dossiers dans "Transfert" et pas ce que pourrait contenir ces éventuels dossiers
  • [c]! -user root[/c] : Exclus de la liste tous les fichiers & répertoires dont le propriétaire est le compte "root" comme la poubelle ou certains fichiers systèmes cachés de DSM
  • [c]-ctime +6[/c] : Ne liste que les fichiers & répertoires dont les propriétés n'ont pas changé depuis + de 6 jours pleins, soit + de 6,9999 jours, donc en fait les fichiers & répertoires de 7j et +.
    Vous pouvez changer ce nombre de jours à votre convenance
  • [c]execdir rm -rf {} +[/c] : Supprime tous les fichiers & répertoires (qu'ils soient vides ou pleins) qui ont été listés
  • [c]-print[/c] : Insert la liste des fichiers & répertoires concernés dans l'email de notification
    L'instruction -print est inutile si vous n'activez pas de notification par email


Conseils
L'utilisation d' [c]execdir rm -rf {} +[/c] est sensible, car cette instruction supprime tout fichier ou dossier trouvé par l'instruction FIND à l'emplacement indiqué et retenu dans sa liste.
Si vous pointez au mauvais endroit, sur un répertoire dont il fallait conserver les données, too bad, l'instruction le videra.
Donc je vous conseille de faire d'abord un ou plusieurs essais avec notification par email et sans l'instruction [c]execdir rm -rf {} +[/c].
Vous pourrez pour cela utiliser le bouton [Exécuter] du Planificateur de tâches pour tester votre script sans attendre l'heure planifiée.
L'email de notification vous enverra la liste des fichiers qu'ils aurait dû normalement supprimer et si tout est bon, vous pourrez alors modifier votre script pour remettre l'instruction [c]execdir rm -rf {} +[/c]. Sinon, vérifiez ce qui ne va pas, ajustez votre script et refaite un test.


Et voilà, c'est tout ! :geek:

Si vous avez bien personnalisé les paramètres, toutes les nuits, à 4h du matin, le NAS regardera automatiquement quels sont les fichiers ou dossiers de plus de 7 jours dans le répertoire Transfert, les supprimera et laissera tous les autres. Et dans la notification par email, le script vous dira quels sont ces fichiers et dossiers qu'il a supprimé et quels sont ceux qu'il devrait supprimer la nuit prochaine.

Enjoy! ;)
 
Merci pour ce partage : l'idee est plutot bonne, et administrable pour d'autres situations.
 
Esteban a dit:
...et administrable pour d'autres situations.
Yep, on peut imaginer vider des logs les plus anciens, des vidéos de surveillances les plus anciennes ou juste être informé par email quand un ou des fichiers sont déposés à un endroit précis. On n'est pas obligé de supprimer des fichiers. On peut accélérer la fréquence des vérifications et envoyer une notification détaillées par email si une condition est remplie :p
 
Dans le même genre, pour ne pas laisser en partage les media apres dl depuis Download Station (et eviter des soucis avec Ha***i)- j'avais fait ca à une une epoque ;o):
Ca s'executait en auto

Code:
#!/bin/bash
Source1="/volume1/Download"
Destination1="/volume1/Videos_OK"

find $Source1 -iname "*.db" -o -name  "*.lnk" -o -name "*.url" -o -name "*.url" -o -name "*.html" -delete
find $Source1 -type f -maxdepth 2 -name "*.*" -exec mv {} $Destination1 \;
find $Source1 -mindepth 1 -empty -type d -delete
 
bravo, où peut-on trouver la liste des instructions disponibles ainsi que des exemples pour se former à l'écriture de scripts ?
ça permet en effet de faire des choses intéressantes
 
jp.froissart a dit:
bravo, où peut-on trouver la liste des instructions disponibles ainsi que des exemples pour se former à l'écriture de scripts ?
ça permet en effet de faire des choses intéressantes
C'est du Shell Unix mais parmi toutes les variantes je ne sais pas laquelle ils utilisent...
https://fr.wikipedia.org/wiki/Shell_Unix

Je n'ai trouvé aucune documentation à ce sujet de la part de Synology. Ni exemple, ni guide de référence, ni tuto. Juste une description très générale de la fonctionnalité des tâches qui n'aide en rien pour les scripts...
https://www.synology.com/fr-fr/knowledgebase/DSM/help/DSM/AdminCenter/system_taskscheduler

Du coup, je me suis rabattu sur d'autres documents qui traitent des commandes de Shell, même s'il n'y a parfois pas vraiment d'explications et si ça ne traite pas forcement de la version exacte utilisée par Synology.
Celui-ci par exemple est très complet sur la commande FIND, celle que j'utilise principalement dans ce script...
http://www.gnu.org/software/findutils/manual/html_mono/find.html
 
Bonjour FTP
------------------------------------
J'ai effectué ta procédure :
printf "\nFichiers supprimés aujourd'hui..."
printf "\n(enregistrement de plus de 30 jours)\n"
find /volume1/camera/video -mindepth 1 ! -user camera -ctime +30 -execdir rm -rf {} + -print
printf "\nFichiers à supprimer demain...\n"
find /volume1/camera/video -mindepth 1 ! -user camera -ctime +29 -print
-----------------------------------
qui fonctionne bien avec la commande "Executer" du planificateur de tache, voici le mail reçu :
*************************
Cher utilisateur,
Le planificateur de tâches à terminé une tâche planifiée.
Tâche : Nettoyage enregistrement plus de 30 jours
Heure de début : Sat, 27 Feb 2021 15:50:56 GMT
Heure d’arrêt : Sat, 27 Feb 2021 15:52:02 GMT
État actuel : 0 (Normal)
Sortie standard/erreur :
Fichiers supprimés aujourd'hui...
(enregistrement de plus de 40 jours)
/volume1/camera/video/131879552013781370-17866/data/DAT_3057977965
/volume1/camera/video/131879552013781370-17866/data/DAT_1127150660
/volume1/camera/video/131879552013781370-17866/data/DAT_1080983008
****************************
mais ne fonctionne pas en automatique à la date et heure quotidienne programmée, voici le résulta du mail reçu :
**************************
Cher utilisateur,
Le planificateur de tâches à terminé une tâche planifiée.
Tâche : Nettoyage enregistrement plus de 30 jours Heure de début : Sat, 27 Feb 2021 17:07:02 GMT Heure d’arrêt : Sat, 27 Feb 2021 17:07:02 GMT État actuel : 1 (Interrompu) Sortie standard/erreur :
Fichiers supprimés aujourd'hui...
(enregistrement de plus de 30 jours)
find: cannot get current directory: Permission denied
Fichiers à supprimer demain...
find: cannot get current directory: Permission denied
Sincères salutations,
Synology DiskStation
********************************************************
Serait-ce le fait qu'il y a un mot de passe pour le user camera ?
si cela est la cause qu'elle est la commande à rajouter ?
merci d'avance de ton aide
Salutations