GoobY13 Posté(e) le 5 février 2007 Partager Posté(e) le 5 février 2007 Hello On m'a demandé de faire une tache de fond pour le serveur sous debian. Ca consisterait en une heure donnée a supprimer tous les mp3 du serveur automatiquement. On m'a parlé de cron ou anacron, mais je sais pas ce que c'est, je débute sous linux^^ Donc si vous avez une aide a me fournir (avec explications si vous avez le temps, histoire que je m'instruise^^). Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
woodystable Posté(e) le 5 février 2007 Partager Posté(e) le 5 février 2007 http://www.commentcamarche.net/tutlinux/lincron.php3 Sinon tu mets juste un script dans le cron.daily qui supprime tous tes mp3. Genre rm -f `find / -iname '*.mp3'` Lien vers le commentaire Partager sur d’autres sites More sharing options...
GoobY13 Posté(e) le 5 février 2007 Auteur Partager Posté(e) le 5 février 2007 Ha merci, le dossier sur le site a l'air complet. Lien vers le commentaire Partager sur d’autres sites More sharing options...
what Posté(e) le 5 février 2007 Partager Posté(e) le 5 février 2007 http://www.commentcamarche.net/tutlinux/lincron.php3 Sinon tu mets juste un script dans le cron.daily qui supprime tous tes mp3. Genre rm -f `find / -iname '*.mp3'` Attention, ce script n'efface pas les mp3 dont le nom contient des espaces. Je préconise : find / -iname '*.mp3' -print0|xargs -r -0 rm -f Lien vers le commentaire Partager sur d’autres sites More sharing options...
GoobY13 Posté(e) le 5 février 2007 Auteur Partager Posté(e) le 5 février 2007 Pas compris la subtilité what, pkoi le 1er n'efface pas s'il y a un espace ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 5 février 2007 Partager Posté(e) le 5 février 2007 Pas compris la subtilité what, pkoi le 1er n'efface pas s'il y a un espace ? rm -f `find / -iname '*.mp3'` Cette commande va tout d'abord exécuter la commande : find / -iname '*.mp3' Cela va donner plein de lignes, par exemple : /home/truc/fichier.mp3 /home/fichier avec espaces.mp3 Ensuite les `` vont prendre ces résultats et les mettre "en ligne", pour faire cela il va remplacer tous les retours à la ligne et les tabulations par des espaces. On obtient donc : rm -f /fichier.mp3 /fichier avec espaces.mp3 Vu comme ça, rm -f reçoit 4 paramètres : "/fichier.mp3" "/fichier" "avec" "espace.mp3". Il y a plusieurs façon de régler ce problème : 1) utiliser le paramètre -exec de find : find / -iname '*.mp3' -exec rm -f {} \; Qui a l'inconvénient de devoir lancer de nombreuses fois la commande rm, et donc de ne pas forcément être efficace. 2) utiliser xargs xargs utilisé tout seul (find / -iname '*.mp3' | xargs rm -f) ne sert à rien car le problème reste identique (pour info xargs prend ce qui arrive sur la sortie standard et passe cela comme options de la commande) Il faut donc utiliser respectivement les options "-print0" de find et "-0" de xargs, ce qui permet à find de sortir des chaînes terminées par un caractères spécial ('\0', comme en C) et à xargs d'interpréter cela correctement... find / -iname '*.mp3' -print0 | xargs -r -0 rm -f 3) échapper tous les espaces en utilisant des outils comme sed Mais ça ne résoud pas le problème pour des tabulations ou des retours à la ligne dans les fichiers... Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 5 février 2007 Partager Posté(e) le 5 février 2007 je ne veux pas paraitre con, mais un bete : find / -iname "*.mp3" -exec rm -f "{}" \; ca ne ferait pas l'affaire ? J'ai l'impression que ca fonctionne bien avec le exec. Enfin bon ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 5 février 2007 Partager Posté(e) le 5 février 2007 je ne veux pas paraitre con, mais un bete : find / -iname "*.mp3" -exec rm -f "{}" \; ca ne ferait pas l'affaire ? J'ai l'impression que ca fonctionne bien avec le exec. Enfin bon ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
GoobY13 Posté(e) le 6 février 2007 Auteur Partager Posté(e) le 6 février 2007 Ha ben là j'ai compris, merci d'avoir pris le temps pour ces explications Lien vers le commentaire Partager sur d’autres sites More sharing options...
GoobY13 Posté(e) le 6 février 2007 Auteur Partager Posté(e) le 6 février 2007 Mon chef lui met : find / -name '*mp3' -exec rm -f '{}' ';' Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 6 février 2007 Partager Posté(e) le 6 février 2007 je ne veux pas paraitre con, mais un bete : find / -iname "*.mp3" -exec rm -f "{}" \; ca ne ferait pas l'affaire ? J'ai l'impression que ca fonctionne bien avec le exec. Enfin bon ^^ oups Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 6 février 2007 Partager Posté(e) le 6 février 2007 enfin, cela dit, ça n'enlevera pas les mp3 qui sont nommés en *.dtc si tu n'a pas beaucoup de répertoire où ces mp3 peuvent se cacher, tu peux faire un coup de file sur tous les fichiers et grep la chaine MPEG pour trouver ceux qui sont vraiment des mp3. exemple gruiik : for i in $(find repertoire); do file $i; done | grep MPEG | cut -d ":" -f1 attention, ça peut être long et douloureux en calcul Lien vers le commentaire Partager sur d’autres sites More sharing options...
GoobY13 Posté(e) le 7 février 2007 Auteur Partager Posté(e) le 7 février 2007 Si il y a pas mal de repertoire vu que c'est dans les dossiers perso de plus de 1200 lycéens ^^ Le nettoyage a été fait hier, et en 3mois 350mp3 trouvé soit 1.5Go ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 7 février 2007 Partager Posté(e) le 7 février 2007 dans ce cas, rajoute dans ton cron un mail avertissant l'heureux possesseur qu'il est interdit de stocker des mp3 sur son compte Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 7 février 2007 Partager Posté(e) le 7 février 2007 D'ailleurs ca serait pas possible de faire un script utilisant fam pour vérifier directement si le fichier est un mp3 (a coup de file), ca serait moins douloureux en scan une fois que le filesystem est clean. Mais bon, ca demandera un script plus évolué je pense (et je ne suis pas calé la dessus) Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 7 février 2007 Partager Posté(e) le 7 février 2007 Ça m'intéressait donc j'ai fait un petit programme en C ("watchdir.c") qui utilise inotify (c'est très simple et c'est efficace, par contre ça ne marche que sous linux>=2.6.13) et qui appelle un script à chaque fois qu'on ferme un fichier qui a été ouvert en écriture. J'ai ensuite créé un petit script ("script.sh") pour tester ça. Au final ça marche vraiment bien, quand on copie un fichier, à la fin de la copie inotify envoie un évènement au programme pour lui signaler qu'un fichier a été modifié, le programme appelle à son tour le script, qui vérifie avec des grep sur le nom et sur la sortie de la commande file et qui supprime le fichier si besoin. Par contre, avec inotify, quand on monitore un dossier, ce n'est pas récursif, donc si on a plusieurs dossier à surveiller il faut lancer plusieurs fois l'exécutable (pas pratique du tout dans le contexte discuté dans ce topic). Le plus simple serait alors de modifier le programme et de rajouter une détection de création et de suppression des dossiers avec inotify et de rajouter et retirer des watch par rapport à ça. Le code n'est pas très long et ça peut potentiellement intéresser du monde, donc je poste ça : watchdir.c #include <stdio.h> /* printf(), perror() */ #include <stdlib.h> /* exit() */ #include <unistd.h> /* exec(), fork() */ #include <sys/wait.h> /* waitpid() */ #include <sys/inotify.h> /* inotify_*() */ #define BUF_LEN 1024 void runscript(char *script, char *folder, char *file) { pid_t pid; pid = fork(); switch(pid) { case 0: execl(script, script, folder, file, NULL); perror("exec"); break; case -1: perror("fork"); break; default: waitpid(pid, NULL, 0); break; } } int main(int argc, char **argv) { char buf[BUF_LEN]; int fd,wd; if(argc <= 2) { if(argc >= 1) printf("Usage : %s folder script\n", argv[0]); exit(1); } fd = inotify_init(); if(fd < 0) { perror("inotify_init"); exit(1); } wd = inotify_add_watch(fd, argv[1], IN_CLOSE_WRITE | IN_MOVED_TO); if(wd < 0) { perror("inotify_add_watch"); exit(1); } int len; while((len = read(fd, buf, BUF_LEN)) > 0) { struct inotify_event *event = (struct inotify_event *)buf; printf("read %i\n", len); while(event < (struct inotify_event *)(buf+len)) { if(wd == event->wd && event->len > 0) { printf("event = %X\n", event->mask); printf("name = %s (len=%i)\n", event->name, event->len); runscript(argv[2], argv[1], event->name); } event++; } } if(len < 1) { perror("read"); exit(1); } return 0; } script.sh #!/bin/sh if [ -z "$1" ] || [ -z "$2" ] then echo "Usage : $0 folder file" exit 1 fi FILE="$1/$2" if ! [ -e "$FILE" ] then echo "$0 : \"$FILE\" : No such file or directory" exit 1 fi if ! [ -f "$FILE" ] then echo "$0 : \"$FILE\" : Not a file" exit 1 fi FILE_EXT="\.mp3$|\.avi$|\.mp[^.]g$|\.wmv$|\.mkv$|\.og[gm]$" FILE_TYPE="MP3|Ogg|Vorbis|OGM|Matroska|MPEG|AVI|ASF|DivX|XviD" detect() { echo "$1" | grep -qiE "$FILE_EXT" && return 0 file -- "$1" | grep -qE "$FILE_TYPE" && return 0 return 1 } echo "" echo "-- script --" if detect "$FILE" then echo "$FILE : Forbidden file detected, removing it!" rm -f -- "$FILE" fi echo "------------" echo "" Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 7 février 2007 Partager Posté(e) le 7 février 2007 Toi, je te jure que je connais des patrons qui vendraient père et mère pour t'embaucher... Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 10 février 2007 Partager Posté(e) le 10 février 2007 Toi, je te jure que je connais des patrons qui vendraient père et mère pour t'embaucher... mdr c'est clair T'as mis combien de temps pour pondre ca, tuXXX ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 10 février 2007 Partager Posté(e) le 10 février 2007 T'as mis combien de temps pour pondre ca, tuXXX ? je dirais 2/3 heures Lien vers le commentaire Partager sur d’autres sites More sharing options...
Arofarn Posté(e) le 11 février 2007 Partager Posté(e) le 11 février 2007 Toi, je te jure que je connais des patrons qui vendraient père et mère pour t'embaucher... P. Nègre J'aime le principe: si tu crée un fichier non-autoriser, il est effacé à peine créer . Je connais des lycéens qui vont pester contre Windows (à tort pour une fois ) En dehors de ça, c'est super pratique comme petit utilitaire : exécuter un script à la création/modification d'un fichier dans un répertoire... Mais si j'ai bien compris ça ne prend pas en compte le contenu des sous-repertoire Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 11 février 2007 Partager Posté(e) le 11 février 2007 Pour ceux que ça intéresse, j'ai une version qui gère la récursion. Mais puisque c'est plus gros (8 fichiers, 470 lignes) et que je n'ai pas (encore ) d'endroit où mettre ça sur le net, il va falloir m'envoyer un mp ou un mail Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 11 février 2007 Partager Posté(e) le 11 février 2007 ou bien, tu fais un compte sur sf.net Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 13 février 2007 Partager Posté(e) le 13 février 2007 et hop : http://dolanor.free.fr/watchdir-5.tar.bz2 v'la le programme Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 13 février 2007 Partager Posté(e) le 13 février 2007 et hop : http://dolanor.free.fr/watchdir-5.tar.bz2v'la le programme Merci 16ar Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.