Aller au contenu

Script pour supprimer des fichiers de plus de X jours

Featured Replies

Posté(e)

Bonjour,

J'utilse un NAS DS214Play depuis 2 ans et il répond parfaitement à mon besoin. A tel point que j'ai parfois tendance à oublier qu'il existe puisqu'il fonctionne sans aucun souci.

Neanmoins, je rencontre aujourd'hui un souci lié à mon incompétence en UNIX. Je possède un système domotique (JEDDOM - génial au passage et opensource !) qui prend des photos à partir des caméras de surveillance de la maison. Les photos sont stockées sur le NAS dans le répertoire /volume1/sauvegarde_pc/Jeedom/Video/Cam_Fleur.

Je souhaiterai mettre en place un système de purge automatique du genre suppression des photos ayant plus de 7 jours.

Après quelques recherches, je m'oriente sur le script ultra simple suivant (nommé remove_photo.sh)

#!/bin/sh

find /volume1/sauvegarde_pc/Jeedom/Video/Cam_Fleur -mtime +7 -exec rm {} \;

J'utilise le planificateur de tâche pour le lancer mais nada. Il semble s'executer (bien que je n'en ai pas la preuve) et aucun fichier n'est supprimé.

Pourriez-vous m'aiguiller svp ?

 

 

 

  • Réponses 68
  • Vues 30.1 k
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Most Popular Posts

  • @bliz Bonjour, Bah, j'en suis pas sûr du tout quand je lis le man de "find" : Je n'associe pas forcément le statut du fichier "changed" à "created" car quand le fichier est créé

  • @MilesTEG1 Bonjour, c'est le moins qu'on puisse dire ... 😜🤣 Cordialement oracle7😉

  • CoolRaoul
    CoolRaoul

    Dans ce cas on peut utiliser cette approche aussi (au passage je ne suis pas sur de comprendre le "plus secure" ) find <bla bla> -print -delete le "-print" aura pour effet d'ajouter la ve

Images postées

Posté(e)

le find semble correct sous reserve du path bien entendu

tu peux simplement tester le find en supprimant tout à partir du -exec via putty

faire un script pour une ligne, autant taper la ligne dans le planificateur de tache

autrement, ton fichier .sh, as-tu fait un chmod +x pour le rendre executable ?

 

Posté(e)
  • Auteur

Super conseil !!! j'ai mis la commande directement dans le planificateur de tâche et cela marche. Merci

Posté(e)

Autant remplacer 

 -exec rm {} \;

par un simple

-delete

Plus efficace (évite un fork pour chaque fichier rencontré) et compact

  • 6 mois après...
Posté(e)

Bonjour,

je suis complètement novice en matière de script Linux et synology mais ce post semble répondre à mon besoin et pourtant....

Je cherche à faire ce qui est di ci-dessus à savoir prendre l'ensemble des fichiers situés dans un répertoire et les supprimer dans un délai de 15 jours.

Soit un script de type :

find /MonChemin/MonDossier -mtime +15 -delete

directement dans le planificateur de tâche, mais contrairement à ddjaff, moi ça ne fonctionne pas.

J'imagine qu'il doit manquer des choses car on ne stipule même pas le type de fichier, ou alors pas besoin? Mais dans ce cas qu'est-ce qui cloche...

Merci de votre temps

Posté(e)
Le 12/4/2016 at 16:46, abree a dit :

Soit un script de type :


find /MonChemin/MonDossier -mtime +15 -delete

directement dans le planificateur de tâche, mais contrairement à ddjaff, moi ça ne fonctionne pas.

  • C'est quoi qui ne fonctionne pas, aucun fichier n'est supprimé ou ca provoque une erreur?
  • la tache est-elle bien programmée pour s'exécuter avec un compte qui à bien le droit d'effacer ces fichiers? cIcckta.png
  • Que donne la même commande dans une session shell (ssh ou telnet via putty), en supprimant "-delete"? 
  • essaye d'activer la trace dans le planificateur de tache pour voir les erreurs: OJ6eUp2.png
Le 12/4/2016 at 16:46, abree a dit :

J'imagine qu'il doit manquer des choses car on ne stipule même pas le type de fichier, ou alors pas besoin? 

Par défaut ca efface tous les fichiers situé en dessous de "/MonChemin/MonDossier" quelque soit leur type. 

Explique nous plutôt ce que tu veux faire pour commencer. Pour l'instant ton besoin reste très flou.

  • 1 an après...
Posté(e)

Bonjour,

Je recherche un script pour planifier une purge dans un dossier qui sert de stockage temporaire.

Merci pour votre aide

  • 4 mois après...
Posté(e)

Bonjour,

Je me permets de mettre le soucis que j'ai à la suite car c'est dans le même genre.

Ceci est fait dans le planificateur de tache (l'utilisateur utilisé a bien tous les droits) et il y a bien plusieurs fichiers qui date de 08 2017

script-J15.jpg.6263f94afe5d4c86d11845cf27d96284.jpg

Voilà le résultat, et bien sûr aucun fichier n'a bougé ... ou est l'erreur ?

Merci d'avance pour l'aide.

Posté(e)

Le répertoire donné en paramètre à la commande find n'existe pas.

Posté(e)

Merci pour la traduction

enfin de compte c'était juste mon écriture de ".../ftp/... qui devait être en majuscule soit ".../FTP/..."
Si cela peut servir à d'autre ...

Par contre j'ai une autre question maintenant que ca fonctionne.


J'ai des fichiers et des dossiers, il n'y a eu que les fichiers qui ont été supprimés
Une idée pour que les dossiers soit aussi supprimés ?
Merci et bonne journée

Posté(e)

En France tout le monde ne parle pas anglais pour commencer.

Le message posté répond au problème: le dossier n'existe pas.

Linux est sensible à la casse. /ftp est différent de /FTP.

 

Pour les dossiers, je suggère de faire en 2 étapes:

- première passe sur les fichiers de type fichier :) avec rm

- deuxième passe sur les fichiers de type dossier avec rmdir (pour être certain de supprimer un dossier vide)

 

 

Posté(e)

Oui tu as raison mais j'aurai du passer le traducteur sur la commande ...

Alors merci de me répondre c'est sympa.

Pour les dossiers, bien que je ne connaisse pas la syntaxe de la commande que tu me dis et avant de chercher.

J'ai un soucis c'est que les dossiers en question font référence à une date donc j'ai un dossier par jour et par mois et années donc cela va être compliqué pour faire une commande pour chaque jour.

qu'en penses tu ?

Posté(e)

Recherche uniquement les fichiers de plus de 15 jours:

find /mon/chemin -type f -mtime +15

Recherche uniquement les répertoires de plus de 15 jours:

find /mon/chemin -type d -mtime +15

Cela permet de s'affranchir de la convention de nommage puisque le critère est une date relative.

Posté(e)

Bonjour,

Donc je viens d'essayer tes deux commandes et ça marche à moitié car il me vide bien le répertoire mais ne le supprime pas : 

find /volume1/FTP/CAMERAS/TERRASSE2 -type f -mtime +15 -delete
find /volume1/FTP/CAMERAS/TERRASSE2 -type d -mtime +15 -delete

et par contre je pense savoir pourquoi ... donc tu vas me dire ce que tu en penses :
en regardant les dates des répertoires qu'il a vidé ; elles sont indiquait 'modifié le 13/01/2018' donc cela doit être a cause de cela qu'il ne les supprime pas !!
Y a t'il la même commande mais qui prendrait la date de création au lieu de la date de modification ?

une deuxième info qui n'a rien a voir avec cela c'est que mon histoire de répertoire (dont on avait parlé plus haut) mon répertoire ftp n'est pas en majuscule dans le nas ... étrange ! pourtant il faut que je le mette en majuscule pour que cela fonctionne dans le script.

Merci et bon week end.

 

Posté(e)

Avec find non (mtime pour modification, ctime pour changement du statut, atime pour accès).

Il est de bon usage de faire -ls avant un -delete pour tester et s'assurer que les critères passés à find retournent le résultat escompté.

Pour le répertoire ftp et la casse... ce qui fait foi est la casse sur le système de fichiers (on peut s'en assurer avec un ls en shell interactif), ftp en majuscule doit être une histoire de présentation (lors de la création du partage j'imagine).

Avec capture d'écran cela peut aider pour faire comprendre.

Posté(e)

Bonjour du Dimanche,

Merci de me répondre, alors j'ai fais une copie d'écran.

Alors pour tout te dire, j'ai pas trop compris comment faire avec tes explications. Suite à ma copie d'écran ce que j'aimerai maintenant c'est pouvoir effacer automatiquement les dossiers vides dans mon répertoire TERRASSE2.
J'ai mis aussi une copie d'écran du résultat pour la commande (tout est ok)

J'espère que j'ai pas trop été embrouillé ...
Merci d'avance et bon dimanche.

CE1.jpg

CE2.jpg

Posté(e)

La commande rmdir ne supprimer que les répertoires vides, donc rmdir /volume1/FTP/CAMERAS/TERRASSE2/* devrait faire l'affaire mais c'est pas le plus élégant.

A vérifier que cela se comporte ainsi sur un syno (mais pas de raison).

 

  • 2 semaines après...
Posté(e)

Bonsoir,

Désolé de la réponse tardive.

Merci de ton aide j'ai testé à l'instant .... ça marche ... super, ça réduit le temps pour le vidage des fichiers et dossiers.

J'ai un message d'erreur mais cela est normal car il essaye de vider des dossiers qui sont pas vide... donc c'est normal et tant que cela ne gène pas le fonctionnement du script je pense que c'est bon.

Merci encore et bonne fin de dimanche.

  • 9 mois après...
Posté(e)

Merci à vous, cela m'a bien aidé.

Pour compléter sur la suppression des répertoires, voici ce que j'ai trouvé sur le site ubuntu :

find . -type d -empty -exec rmdir "{}" \;                                

find . -type d -empty -print0 | xargs --null rmdir

rmdir * 2> /dev/null                                                 //2> /dev/null    enleve les messages d'erreurs

Posté(e)

Je débarque sur ce post qui concerne exactement ce que je cherche à faire, effacer les anciens enregistrements de plus de x jours, que j'enregistre en ftp depuis mes caméras netatmo.

 J'ai un syno ds218 . J'ai testé ce soir tout simplement en rentrant dans planificateur de taches ceci: Mais rien ne se passe et les fichiers n'ont pas bougé, pourquoi ?

J'ai mis dans le champ script: find /volume1/video/netatmo welcome -mtime +60 -delete

Le chemin /volume1/video/netatmo welcome est bon. Mais rien ne se passe, que je mette en root ou sur mon user admin.

 

IMG_0709.HEIC

Modifié par Stephane Lang

Posté(e)

Il serait bon de mettre un fichier lisible directement depuis le navigateur à des fins de sécurité pour les autres membres 😉

Tu as différents services d'envois d'images comme imgur par exemple.

 

Essaie ça en modifiant la cible du dossier :

find /volume1/dossier -type f -name "*.mkv" -mtime +60 -exec rm {} \; 

 

Modifié par Zeus

Posté(e)

Merci zeus je vais essayer ça en rentrant du boulot plus tard. Désolé je suis toujours un peu perdu en ce qui concerne l'envoi de pièces jointes ou de photos, ça change un peu selon les forums et chaque fois je galère. Encore pardon. Je vous tiens au courant.

Par contre, mes fichiers vidéos ne sont pas des mkv, ce sont des .mp4.

Apparemment dans le output.log  j'ai une erreur car dans mon nom de dossier y'a un espace. Le nom de mon dossier c'est netatmo welcome. 

Modifié par Stephane Lang

Posté(e)

Et bien tu changes mkv par ce que tu veux 🙂

 

Modifié par Zeus

Posté(e)

ça m’intéresse aussi ce script, pour supprimer des fichiers d’enregistrement périodiques de TV créés par VideoStation.

Je souhaite donc supprimer les fichiers ayant pour extension "ts" présents sous /video/TV

J'ai testé une tâche avec find /Volume1/video/TV -type f - name "*.ts " -mtime +7 -ls

ça ne fonctionne pas : find: unknown predicate `-type'

Une idée ?

Posté(e)
il y a 6 minutes, StéphanH a dit :

J'ai testé une tâche avec find /Volume1/video/TV -type f - name "*.ts " -mtime +7 -ls

ça ne fonctionne pas : find: unknown predicate `-type'

Une idée ?

Je ne serais pas étonné que tu sois tombé sur la même erreur de copier/coller que celle rencontrée ici:

https://www.nas-forum.com/forum/topic/38513-copie-automatique-du-disque-dur-freebox-vers-le-synology/?do=findComment&amp;comment=1319359828

 

Modifié par CoolRaoul

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.