nexius2 Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 (modifié) hello il y a plein de fichiers thumbs.db sur mon nas... et ca m'enerve... du coup, je me suis dit que j'allais faire un script que je lancerais via tache planifier regulierement pour me debarraser de ces petites betes. seulement voila, je voudrais loger tout ca et j'ai un truc que je ne vois pas qui me bloque (j'ai exactemement le meme probleme sur un autre script en plus...) #!/bin/sh ( rep="/volume1/NetBackup" repBck="/volume1/DATA/temp" LOG_FILE="/volume1/System/System_Logs/delete.thumbs.db.sh.log" find $rep -iname 'Thumbs.db' -exec mv '{}' $repBck/ ; ) 2>&1 | tee $LOG_FILE si je met la variable $LOG_FILE, ca ne marche pas, si je met direct le fichier, ca marche.... pourquoi? Modifié le 11 septembre 2014 par nexius2 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Einsteinium Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 Pourquoi faire compliquer quand on peux faire simple ? #!/bin/sh find / -type f -name Thumbs.db -exec rm -rf '{}' ; En plus en tenir la liste dans un log, useless. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 (modifié) mon coté parano, imagine un fichier contient les lettres"thumbs.db"... pouf, je le perd.... dans mon cas, il est juste deplacer.... accessoirement, je peux m'en servire pour deplacer d'autre fichier le log, c'est par ce que je log tout et qu'en plus, j'ai le meme probleme sur un autre script... Modifié le 11 septembre 2014 par nexius2 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 (modifié) si je met la variable $LOG_FILE, ca ne marche pas, si je met direct le fichier, ca marche.... pourquoi? Tu définis la variable LOG_FILE *dans* le sous-shell (la partie entre les parenthèses), son contenu est inconnu en dehors du bloc: ( ... ) Ceci devrait mieux marcher: LOG_FILE=.... ( ... ) | tee $LOG_FILE Modifié le 11 septembre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 (modifié) effectivement, y'a du mieux ! pour les quotes, ca ne change rien j'ai sorti la variable du "bloc" et la, j'ai au moins le log qui se créer... par contre, il contient "w羪먀" Modifié le 11 septembre 2014 par nexius2 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 (modifié) J'avais même pas jeté un oeuil au contenu du bloc Pourquoi donc faire des "mv" plutôt que des rm? En outre, et une approche du style: find $rep -print0 -iname 'Thumbs.db' | xargs -0 rm serait bien plus efficace que des "-exec" **edit** Je m'apercois que le "find" de DSM supporte "-delete", donc: find $rep -iname 'Thumbs.db' -delete sera encore plus simple et efficace Modifié le 11 septembre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 pourquoi des mv... juste par peur de supprimé quelque chose qui porterais un nom similaire. je vais me servir de ce script pour d'autres choses et j'ai pas envie de perdre de données. je vais essayer ton approche... je suppose que le 2ieme $rep est la destination en fait? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 (modifié) pourquoi des mv... juste par peur de supprimé quelque chose qui porterais un nom similaire. je vais me servir de ce script pour d'autres choses et j'ai pas envie de perdre de données. Ou mais là tu fait des "mv" de fichiers qui ont tous le même nom vers un répertoire unique, donc tu va quand même perdre des données (sauf le dernier traité) je vais essayer ton approche... je suppose que le 2ieme $rep est la destination en fait? Non, c'était une faute de frappe. J'ai corrigé Modifié le 11 septembre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 exact! et je me disait que si j'avais un fichier disont, IThumbs.dbo, il ne serais du coup, pas supprimé....sauf qu'en fait, il n'ai meme pas pris en compte.. visiblement, le find prend le fichier (ou dossier) avec cet exact formulation et pas autre chose.... donc je peux faire un -delete :-) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 visiblement, le find prend le fichier (ou dossier) avec cet exact formulation et pas autre chose.... Encore heureux que "find" ne fonctionne pas en logique floue, son utilisation serait franchement risquée! (mais les "*" sont supportés dans "-name" par contre) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 #!/bin/sh LOG_FILE=/volume1/System/System_Logs/delete.thumbs.db.sh.log ( rep=/volume1/NetBackup find $rep -iname 'Thumbs.db' -delete ) 2>&1 | tee $LOG_FILE bon, ca marche, mis a part que je revient sur mon probleme de log... j'ai en sortie des symboles... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 (modifié) bon, ca marche, mis a part que je revient sur mon probleme de log... j'ai en sortie des symboles... Alors là, c'est d'autant plus étrange qu'en l'état le log devrait être vide! Quelle est sa taille? Et sa date de modification est bien l'heure actuelle? Modifié le 11 septembre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 oui, pour etre sur, je le supprime avant.... et voici ce qu'il contient s羪먀 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 tu me vois perplexe 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 on est 2 alors ! :-) dans le log de sortie, si je change le codage en UTF8, il devient....vide....et effectivement, il fait 0 byte.... mais alors je n'ai pas les fichier supprimé dans mon log la.... y'a t'il moyen de loguer tout? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 mais alors je n'ai pas les fichier supprimé dans mon log la.... y'a t'il moyen de loguer tout? Faut changer d'approche alors puisque ni "find -delete" ni "rm" (celui de dsm en tout cas) ne sait logger ce qui est effacé. Donc retour à la methode "xargs" qui, lui, dispose de l'option "-t" (trace): find $rep -iname 'Thumbs.db' -print0 | xargs -0 -t rm 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 meme resultat.... j'ai meme essayer de demander le log direct apres la commande: find $rep -iname 'Thumbs.db' -print0 | xargs -0 -t rm | tee $LOG_FILE toujours pareil...aucun retour de suppression 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fravadona Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 Tu dois rajouter un -print a la fin de commande find 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 bon.... pas moyen de faire un truc propre... voici ce que j'ai, ca fonctionne... ca ira bien... #!/bin/sh LOG_FILE=/volume1/System/System_Logs/delete.thumbs.db.sh.log rep=/volume1/NetBackup find $rep -iname 'Thumbs.db' -print | tee $LOG_FILE find $rep -iname 'Thumbs.db' -delete 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fravadona Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 (modifié) #!/bin/sh LOG_FILE=/volume1/System/System_Logs/delete.thumbs.db.sh.log rep=/volume1/NetBackup find "$rep" -iname 'Thumbs.db' -delete -print >& "$LOG_FILE" Modifié le 11 septembre 2014 par Fravadona 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 Tu dois rajouter un -print a la fin de commande find Non: il y a le "-print0" ! #!/bin/sh LOG_FILE=/volume1/System/System_Logs/delete.thumbs.db.sh.log rep=/volume1/NetBackup find "$rep" -iname 'Thumbs.db' -delete -print >& "$LOG_FILE" Pas compris à quoi correspond le ">&" Sinon, dans ce cas autant faire: exec >"$LOG_FILE" 2>&1 suivi de find "$rep" -iname 'Thumbs.db' -delete -print Mais ne pas oublier qu'initialement le "tee" était destiné a dupliquer les traces simultanément à l'écran et dans le fichier .log, ce n'est plus le cas là. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 (modifié) ah bas voila... super merci, ca marche nickel ! ;-) ya moyen de faire une zone d'exeption avec find? je trouve le ! pour exclure un type de fichier, mais si c'est un dossier que je veux exclure? par exemple #recycle ... la fonction prune marche sur les syno, ca doit donner quelque chose comme ca: find "$rep" "/volume1/video/#recycle/" -prune -o -iname 'Thumbs.db' -delete -print >& "$LOG_FILE" Modifié le 11 septembre 2014 par nexius2 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fravadona Posté(e) le 11 septembre 2014 Partager Posté(e) le 11 septembre 2014 (modifié) Non: il y a le "-print0" ! C'est clair, j'avais pas vu que vous etiez parti sur du xarg ^^ Pas compris à quoi correspond le ">&" C'est un raccourci : "commande >& fichier.log" est identique a "commande > fichier.log 2>&1" exec >"$LOG_FILE" 2>&1 Ca a une portee differente (rediriger les stdout et stderr de toutes les instructions du script) mais pour le cas present c'est equivalent. ya moyen de faire une zone d'exeption avec find? je trouve le ! pour exclure un type de fichier, mais si c'est un dossier que je veux exclure? par exemple #recycle ... Un truc du genre : find "$rep" ! -path "*/#recycle/*" -name 'Thumbs.db' -delete -print >& "$LOG_FILE" Modifié le 11 septembre 2014 par Fravadona 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 septembre 2014 Auteur Partager Posté(e) le 11 septembre 2014 ah bas oui, un truc dans ce gout la.. :-) Merci beaucoup pour l'aide! 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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.