Aller au contenu

Script Pour Supprimer Les Thumbs.db

Featured Replies

Posté(e)

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é par nexius2

Posté(e)

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.

Posté(e)
  • Auteur

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é par nexius2

Posté(e)

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é par CoolRaoul

Posté(e)
  • Auteur

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é par nexius2

Posté(e)

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é par CoolRaoul

Posté(e)
  • Auteur

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?

Posté(e)

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é par CoolRaoul

Posté(e)
  • Auteur

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 :-)

Posté(e)

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)

Posté(e)
  • Auteur
#!/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...

Posté(e)

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é par CoolRaoul

Posté(e)
  • Auteur

oui, pour etre sur, je le supprime avant.... et voici ce qu'il contient

s羪먀
Posté(e)
  • Auteur

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?

Posté(e)

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 
Posté(e)
  • Auteur

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

Posté(e)

Tu dois rajouter un -print a la fin de commande find

Posté(e)
  • Auteur

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
Posté(e)
#!/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é par Fravadona

Posté(e)

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à.

Posté(e)
  • Auteur

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é par nexius2

Posté(e)

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é par Fravadona

Posté(e)
  • Auteur

ah bas oui, un truc dans ce gout la.. :-)

Merci beaucoup pour l'aide!

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.