Aller au contenu

Script pour supprimer des fichiers de plus de X jours


ddjaff

Messages recommandés

elles le sont ... en voiture ... en baladant un disque dur portable entre deux NAS ...
Quand on n'a qu'un abonnement 3G comme seul moyen de connexion, on limite le volume de data (en tous cas pour le dossier video)

bon, ça marche (finalement ...)

Modifié par StéphanH
Lien vers le commentaire
Partager sur d’autres sites

Je suis au bon endroit lol, je vois deux connaisseurs qui sauront me rendre cette fonction opérationnelle et sans erreurs...

je suis donc de retour, j'ai vérifié mon dossier ou sont stockés les videos de ma camera, et effectivement , en regardant de près, les videos de plus de 60 jours ne sont plus la. Ceci avec mon premier script:

find /volume1/video/netatmo welcome -type f -mtime +60 -delete

Sauf que, tous les dossiers qui sont créés lors des enregistrements sont encore la, vides. Les dossiers sont crées automatiquement comme suit: Année , mois, jours, par leurs chiffres. Comment supprimer automatiquement les dossiers vides aussi à chaque fois que la tache est exécutée ?

Dans les paramètres du planificateur de taches j'avais activé "enregistrer les résultats de sortie" . Je constate qu'un dossier synosheduler est crée, dedans un fichier script.log et un output.log sont crées. Dans output.log cependant quelque chose de bizarre: 

find: `/volume1/video/netatmo': No such file or directory
find: `welcome': No such file or directory

gqLA8rT.png

Comment ça se fait ? sachant que le chemin est: /volume1/video/netatmo welcome 

(avec un espace entre)

Est-ce que c'est normal ? comment éviter cette erreur ?

Bref , encore quelques points à éclaircir pour un peu mieux cerner cette prog en script ou je suis totalement novice (je suis juste les "tutos" lus ici et la)

 

Modifié par Stephane Lang
Lien vers le commentaire
Partager sur d’autres sites

il y a 44 minutes, Zeus a dit :

Pour supprimer mes dossiers vides qui sont nommés par date de création, voici ma commande :


find /volumeX/etc... -type d -name "*.*.20*_*" -empty -type d -delete

 

est-ce que je pourrais écrire aussi plus simple : sans le premier -type d -name "*.*.20*_*" ? c'est à dire juste la commande -empty -type d -delete , pour supprimer sans distinction tous les dossiers vides ? Voir même y mettre le -mtime +60 pour ne cibler que les dossiers de plus de 60 jours ?

Autrement, une idée pour cette erreur sur ma capture d'écran ? no such file or directory 

Modifié par Stephane Lang
Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, Stephane Lang a dit :

est-ce que je pourrais écrire aussi plus simple : sans le premier -type d -name "*.*.20*_*" ? c'est à dire juste la commande -empty -type d -delete , pour supprimer sans distinction tous les dossiers vides ? Voir même y mettre le -mtime +60 pour ne cibler que les dossiers de plus de 60 jours ?

Tu peux aller au plus simple en effet:

find /le/chemin/de/ton/dossier/video -depth -type d -empty -delete

Note: le "-depth" est une astuce qui permet de supprimer les dossiers éventuellement pas vides mais qui ne contiennent que des sous-dossiers vides: supposons un chemin "a/b/c" où a , b et c ne contiennent rien d'autre que ces mêmes dossiers, sans le "-depth", seul "c" serait supprimé, alors qu'avec "a" et "a/b" sont également supprimés.

Il y a 1 heure, Stephane Lang a dit :

Autrement, une idée pour cette erreur sur ma capture d'écran ? no such file or directory 

Tu as écrit que "le chemin est: /volume1/video/netatmo welcome"

Si il n'y pas d'erreur ici (c'est à dire qu'il y bien un un blanc entre "netatmo" et "welcome", autrement dit que le dossier cible se nomme "netatmo<espace>welcome"), alors, pour que ça marche, il faut entourer le tout de quotes, comme ceci:

find "/volume1/video/netatmo welcome" etc ...

 

Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

Super merci beaucoup Raoul , je vais tester tout ça maintenant . Je vous laisserai un mot pour dire si ça fonctionne...ou pas 🙂

edit: du coup , peut on tout mettre dans une ligne de script ? C'est à dire , supprimer les fichiers et les dossiers de plus de 60 jours?

Si c'est possible, je mets quoi et dans quel ordre alors derrière

find "/volume1/video/netatmo welcome"
Modifié par Stephane Lang
Lien vers le commentaire
Partager sur d’autres sites

Il y a 13 heures, Stephane Lang a dit :

du coup , peut on tout mettre dans une ligne de script ? C'est à dire , supprimer les fichiers et les dossiers de plus de 60 jours?

Oui mais ça risque de devenir un peu compliqué à lire pour gérer fichiers et dossiers, faudrait falloir jongler avec des clauses "ou" ("-o") et des parenthèses dans le find (le "-empty" ne doit s'appliquer qu'aux dossiers, pas aux fichiers)

Ca ne mange pas de pain et est plus lisible de faire ça en deux lignes. Les fichiers en premier et les dossiers vides ensuite :

# purge des fichiers de plus de 2 mois
find "/volume1/video/netatmo welcome" -type f -mtime +60 -delete
# purges des dossiers vides 
find "/volume1/video/netatmo welcome" -mindepth 1 -depth -type d -empty -delete

NB: le -mindepth 1 que j'ai ajouté a pour effet pour ne traiter que les dossier de niveau 1 et plus et donc pas "netatmo welcome" lui même pour ne pas l'effacer au cas ou si il se retrouve vide.

Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...
Il y a 8 heures, StéphanH a dit :

Depuis que j'ai créé cette règle, qui fonctionne très bien, VideoStation ne "voit" pas que les fichiers sont supprimés : ils restent indexés.

Une idée ?

Oui: toutes les modifications (ajouts et suppressions) de fichiers faites par des scripts ou en ligne de commande ne sont pas détectées par l'indexeur. Seul les modules/paquets natifs DSM (samba/ftp/webdav/... serveur, et autres filestation, cloud-bidule, etc etc ..., gèrent ce genre cette situation).

Il faut donc utiliser la commande "synoindex" (/usr/syno/bin/synoindex) pour activer un rescan, total ou partiel.

Son aide intégrée:

Usage:                                                                                                                                                         
synoindex [OPTIONS]                                                                                                                                            

Index Options:                                                                                                                                                 
    -h, --help                                                                                                                                                 
        this help text                                                                                                                                         
    -A dirpath                                                                                                                                                 
        add a dir                                                                                                                                              
    -a filepath                                                                                                                                                
        add a file                                                                                                                                             
    -D dirpath                                                                                                                                                 
        delete a dir                                                                                                                                           
    -d filepath                                                                                                                                                
        delete a file                                                                                                                                          
    -N new_dirpath old_dirpath                                                                                                                                 
        rename a dir                                                                                                                                           
    -n new_filepath old_filepath                                                                                                                               
        rename a file                                                                                                                                          
    -R [all|media|photo|music|video|thumb|dirpath]                                                                                                             
        all:     reindex all dirpath that registered in each package                                                                                           
        media:   reindex dirpath that registered in MediaIndex package                                                                                         
        photo:   reindex photo dirpath                                                                                                                         
        music:   reindex music dirpath                                                                                                                         
        video:   reindex video dirpath                                                                                                                         
        thumb:   check converted video of each video file                                                                                                      
        dirpath: reindex this specific dirpath                                                                                                                 
    -R user:{user_name}                                                                                                                                        
        reindex personal photo dirpath                                                                                                                         
    -R share:{share_name}                                                                                                                                      
        reindex share dirpath                                                                                                                                  
    -R [type_music|type_video|type_photo]                                                                                                                      
        reindex dirpath that registered with specific type in MediaIndex                                                                                       
                                                                                                                                                               
Package Index Options:                                                                                                                                         
    -P [MediaIndex|{package_name}] {index_option}                                                                                                              
        index operation only apply on this package                                                                                                             
    -p [MediaIndex|{package_name}] {index_option}                                                                                                              
        index operation apply all packages except for this package                                                                                             
                                                                                                                                                               
File Index Options:                                                                                                                                            
    -f {index_option}                                                                                                                                          
        index operation apply on file index                                                                                                                    
    -U photo                                                                                                                                                   
        update photo images              
Dans le cas présent je pense qu'in "synoindex -R /chemin/du/dossier/modifié" devrait faire l'affaire
NB: la commande rend la main immédiatement, c'est normal, ça envoie juste un message à gestionnaire d'indexation qui fait le boulot en tache de fond.
Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

  • 10 mois après...
  • 1 an après...

Bonjour à tous,

Je me permets d'up ce message car ce post répond à mon attente car je suis un gros newbie.

Pour la famille j'utilise mon nas pour Plex et souhaiterai mettre en place une règle pour chaque dossier (séries/Dessins animés/Films, etc...), afin de supprimer définitivement les vidéos de plus de 4 mois par exemple.

Est-ce que ça donnerait ça (pour les films) ? :

 

find/volume1/video/FILMS-type f -mtime +240 -delete

Merci pour votre aide

Lien vers le commentaire
Partager sur d’autres sites

@FabioDM

Bonjour,

Tu n'étais pas loin MAIS, cette commande sera sûrement plus efficace :

find /volume1/video/FILMS -type f -mtime +240 -exec /usr/bin/rm -f {} \;

ATTENTION à la syntaxe !!! : les espaces notamment ...

Tu lances cette commande soit directement dans un terminal sous SSH ou bien soit tu crées une tache programmée dans le planificateur de tâches telle que :

bash find /volume1/video/FILMS -type f -mtime +240 -exec /usr/bin/rm -f {} \;

 

Fais quand même AVANT de la mettre en production, un essai sur un répertoire spécifique avec des fichiers sans importance. Maintenant ce que j'en dis ...

Edit : en ajoutant l'option "v" (par ex : -vf) à la commande "rm" tu auras un mode plus parlant si besoin.

Cordialement

oracle7😉

Modifié par oracle7
Lien vers le commentaire
Partager sur d’autres sites

Hello,

ayant récemment fait un script de sauvegarde pour mes données Gitea, j'ai aussi du chercher un moyen de supprimer des fichiers plus vieux que XX jours.
Voilà la solution que j'ai trouvée :
 

BACKUP_DIR=/chemin/vers/les/fichiers/backup/
NB_JOURS_A_GARDER=10            # C'est le nombre de jours à garder
# On liste les fichiers, pour tester la commande
# Data-Backup* étant le début du nom du fichier de sauvegarde qui contient la date, et l'heure du backup

find $BACKUP_DIR/* -name 'Data-Backup*' -mtime +"$((NB_JOURS_A_GARDER - 1))" -exec ls -lat --color {} \;

# Commande qui fait la même chose mais en supprimant les fichiers de plus de NB_JOURS_A_GARDER
find $BACKUP_DIR/* -name 'Data-Backup*' -mtime +"$((NB_JOURS_A_GARDER - 1))" -exec rm -v {} \;

edit : je viens de voir que ma commande ressemble beaucoup à celle de @oracle7 😄 
j'ai juste variabiliser certaines choses 😉  Et mis le mode verbose.

Je pourrais peut-être mettre le mode -f, c'est pour forcer la suppression n'est-ce pas ?

Modifié par MilesTEG1
Lien vers le commentaire
Partager sur d’autres sites

[mention=80481]FabioDM[/mention]Tu n'étais pas loin MAIS, cette commande sera sûrement plus efficace :
find /volume1/video/FILMS -type f -mtime +240 -exec /usr/bin/rm -f {} \;


Je ne comprends pas ce qui fait dire que "-exec /usr/bin/rm -f {} \;" serait plus efficace que "-delete."
Au contraire la première forme lance un process pour chaque suppression alors que l'autre n'en lance aucun (c'est built-in dans find).
Même si j'imagine que l'impact reste minime bien entendu.
Lien vers le commentaire
Partager sur d’autres sites

il y a 4 minutes, CoolRaoul a dit :

Je ne comprends pas ce qui fait dire que "-exec /usr/bin/rm -f {} \;" serait plus efficace que "-delete."
Au contraire la première forme lance un process pour chaque suppression alors que l'autre n'en lance aucun (c'est built-in dans find).
Même si j'imagine que l'impact reste minime bien entendu.

Ha je savais pas que le find avant un flag -delete...
Du coup je suis curieux de savoir s'il y a une différence entre les méthodes et une préférence à avoir.

Il y a 11 heures, oracle7 a dit :

@MilesTEG1

Bonjour,

c'est le moins qu'on puisse dire ... 😜🤣

Cordialement

oracle7😉

Par contre je viens de voir que ta commandes va supprimer tous les fichiers de plus de XX jours sans distinction de nom.

À voir si c'est ce qu'il lui faut.
La mienne va supprimer tous les fichiers qui ont un nom qui débute par 'Data-Backup' , et là il n'y a pas besoin du flag -type f.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous et merci pour vos réponses 🙂

Je vais donc tester dans un repertoire test comme suggéré qui s'appelle video avec le planificateur de taches

Ca donnerait donc ça ?

bash /find /volume1/video-type f -mtime +240 -exec /usr/bin/rm -vf {} \;

Je viens de tester et j'ai un message d'erreur que voici. 

État actuel : 127 (Interrompu)
Sortie standard/erreur :
bash: /find: No such file or directory

 

Merci pour votre aide

Modifié par FabioDM
MAJ Erreur
Lien vers le commentaire
Partager sur d’autres sites

il y a 4 minutes, FabioDM a dit :

Ca donnerait donc ça ?


bash find /volume1/video-type f -mtime +240 -exec /usr/bin/rm -vf {} \;
  • le "bash" en début est à supprimer
  • il manque un espace avant "-type"
  • -delete serait quand meme plus lisible et concis que -exec .... \; (mais ça ne change rien  fonctionnellement)
Lien vers le commentaire
Partager sur d’autres sites

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…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

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.