Aller au contenu

Un Script Pour Nettoyer Les Partitions Du Syno


DjRamzy

Messages recommandés

Bonjour, ou Bonsoir,

Après le script permettant de voir si un utilisateur à modifier son compte 'home', je me suis rendu compte que j'allais souvent enlever tous les fichier temporaires des différents O.S. : par exemple "Thumbs.db" ou "desktop.ini" de windows ainsi que ".DS_Store" de OSX.

J'ai donc décidé de commencer un script qui Nettoie les partitions "home" dans un premier temps, puis plus générale par la suite.

Voici mon script qui est bien avancé car il fonctionne très bien sur mon PC sous UNIX (nettoie même les partitions windows montées en ntfs), mais n'est pas tout à fait opérationnel pour le syno :

 #!/bin/sh

 #

 # clean

 #

 # Script de nettoyage récursif (.DS_Store;Thumbs.db;desktop.ini)

 #

 # By Djramzy Version du 31 Mars 2009

 #####################################################################


 #

 # Variable par défaut

 ########################


 # Votre dossier nettoyé par défaut lorsqu'on lance clean sans option :

 RACINNE="/volume1/homes"


 # Liste des fichiers à effacer par défaut (séparé par des espaces):

 TRASH=".DS_Store Thumbs.db desktop.ini"


 # Version

 VERSION="Version 1.0 du script de nettoyage"


 # Activation des commentaires lors de la suppression ("true" ou "false")

 #COMMENTAIRE="false"

 COMMENTAIRE="true"


 #

 # Fonctions

 ########################


 usage()

 {

	 echo "Usage :"

	 echo ""

	 echo "clean [-farvV] [option]"

	 echo ""

	 echo "   [dossier] : Mode normal"

	 echo "-f [dossier] : Mode force"

	 echo "-a  fichier  : Ajouter un fichier à supprimmer"

	 echo "-r		   : Remise à zéro des fichiers à supprimer"

	 echo "  Par défaut : "$TRASH

	 echo "-v		   : Affiche la liste des fichiers à supprimer"

	 echo "-V		   : Version"

	 exit 1;

 }



 creer_fichier_temp()

 {

	 if [ ! -r "/tmp/clean" ]

	 then

	 echo $TRASH > /tmp/clean

	 fi;

 } 



 effacer ()

 {

	 if [ $FORCE = "true" ]

	 then

	 FICHIER=`more /tmp/clean`

	 rm -f $FICHIER

	 if [ $COMMENTAIRE = "true" ]

	 then

		 echo "Nettoyage du dossier : "`pwd`

	 fi

	 else

	 echo""

	 echo "Voulez-vous nettoyer le dossier : $DOSSIER? (y/n) :"

	 read REPONSE

	 if [ $REPONSE = "y" ]

	 then

		 FICHIER=`more /tmp/clean`

		 rm -f $FICHIER

		 if [ $COMMENTAIRE = "true" ]

		 then

		 echo "Nettoyage du dossier : "`pwd`

		 fi

	 fi

	 fi;

 }



 clean()

 {

	 cd "$DOSSIER"

	 if [ $? = "0" ]

	 then

	 effacer

	 for DOSSIER in `ls -A`

	 do

		 if [ -d "$DOSSIER" ]

		 then

		 if [ -r "$DOSSIER" ]

		 then

			 if [ ! -h "$DOSSIER" ]

			 then

			 clean

			 fi

		 fi

		 fi

	 done

	 cd ../

	 else

	 exit 1

	 fi;

 }


 #

 # Programme

 #########################


 FORCE="false"

 creer_fichier_temp


 case $1 in


	 -f )

	 FORCE="true"

	 if [ $2 ]

	 then

		 if [ ! -d $2 ]

		 then

		 usage

		 fi

		 RACINNE=$2

	 fi

	;;


	 -V ) 

	 echo $VERSION

	 exit 0

	;;


	 -a )

	 if [ $2 ]

	 then

		 FICHIER=`more /tmp/clean`

		 FICHIER=$FICHIER" "$2

		 echo $FICHIER > /tmp/clean

		 echo "Nouvelle liste des fichiers à supprimer :"

		 echo $FICHIER

		 exit 0

	 else

		 usage

	 fi

	;;


	 -r )

	 echo $TRASH

	 echo "Voulez-vous vraiment remettre la liste par défaut ? (y/n)"

	 read reponse

	 if [ $reponse = "y" ]

	 then

		 echo $TRASH > /tmp/clean

		 echo "Remise à zéro des fichiers à supprimer"

	 else

		 echo "La liste n'a pas été remise à zéro"

	 fi

	 exit 0

	;;


	 -v )

	 echo "Liste des fichiers à supprimer :"

	 FICHIER=`more /tmp/clean`

	 echo $FICHIER

	 exit 0

	;;


	 "" )	   

	;;


	 * )

	 if [ ! -d $1 ]

	 then

		 usage

	 else

		 RACINNE="$1"

	 fi

	;;	

 esac



 cd $RACINNE

 RACINNEBIS=`pwd`

 cd ../

 DOSSIER=`echo "$RACINNEBIS" | awk -F "/" '{ print $NF }'`

 if [ ! $DOSSIER ]

 then

	 DOSSIER="/"

 fi

 clean

Les problèmes rencontrés sur le synology sont de deux types :

- le nom du dossier a un espace dans son nom

- le nom du dossier commence par la lettre "-"

Même en mettant des guillements autour de la variable $DOSSIER dans la fonction clean cela ne fonctionne pas, je ne vois vraiment pas pourquoi :shok:

NOTE : En faite sous mon UNIX préféré j'ai le même problème, lorsqu'il voit un répertoire avec un espace il est tout simplement ignoré....

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je n'ai pas tout lu, mais cela ne revient-il pas a la même chose ?

#!/bin/sh

#

# Variable par defaut

########################


RACINE="/volume1/homes"

LISTE=".DS_Store Thumbs.db desktop.ini"


#

for bo in $LISTE; do

find $DOSSIER -name "$bo" -exec rm -f {} \; 2> /dev/null

done

Bonne nuit, :hi:

Fred.

Lien vers le commentaire
Partager sur d’autres sites

Merci, je ne connaissais pas la commande 'find' qui est très sympa une fois qu'on a lu la doc :good:

J'ai donc recommencer le script, que voici :

 #!/bin/sh

 #

 # clean

 #

 # Script de nettoyage(.DS_Store;Thumbs.db;desktop.ini)

 #

 # By Djramzy Version du 1 Avril 2009

 #####################################################################


 #

 # Variable par défaut

 ########################


 # Votre dossier nettoyé par défaut lorsqu'on lance clean sans option :

 RACINNE="/volume1/homes"


 # Liste des fichiers à effacer par défaut (séparé par des espaces):

 TRASH=".DS_Store Thumbs.db desktop.ini"


 # Version

 VERSION="Version 2.0 du script de nettoyage"


 #

 # Fonctions

 ########################


 usage()

 {

	 echo "Usage :"

	 echo ""

	 echo "clean [-farvV] [option]"

	 echo ""

	 echo "   [dossier] : Mode normal"

	 echo "-f [dossier] : Mode force"

	 echo "-a  fichier  : Ajouter un fichier à supprimmer"

	 echo "-r		   : Remise à zéro des fichiers à supprimer"

	 echo "  Par défaut : "$TRASH

	 echo "-v		   : Affiche la liste des fichiers à supprimer"

	 echo "-V		   : Version"

	 exit 1;

 }



 creer_fichier_temp()

 {

	 if [ ! -r "/tmp/clean" ]

	 then

	 echo $TRASH > /tmp/clean

	 fi;

 }



 clean()

 {

	 LISTE=`more /tmp/clean`

	 for bo in $LISTE;

	 do

	 find "$RACINNE" -name "$bo" -ok rm -f {} \;

	 done

	 exit 0

 }   


 cleanf()

 {

	 LISTE=`more /tmp/clean`

	 for bo in $LISTE;

	 do

	 find "$RACINNE" -name "$bo" -delete

	 done

	 exit 0

 }  




 #

 # Programme

 #########################



 creer_fichier_temp


 case $1 in


	 -f )

	 if [ "$2" ]

	 then

		 if [ ! -d "$2" ]

		 then

		 usage

		 fi

		 RACINNE="$2"

	 fi

	 cleanf

	;;


	 -V ) 

	 echo $VERSION

	 exit 0

	;;


	 -a )

	 if [ $2 ]

	 then

		 FICHIER=`more /tmp/clean`

		 FICHIER=$FICHIER" "$2

		 echo $FICHIER > /tmp/clean

		 echo "Nouvelle liste des fichiers à supprimer :"

		 echo $FICHIER

		 exit 0

	 else

		 usage

	 fi

	;;


	 -r )

	 echo $TRASH

	 echo "Voulez-vous vraiment remettre la liste par défaut ? (y/n)"

	 read reponse

	 if [ $reponse = "y" ]

	 then

		 echo $TRASH > /tmp/clean

		 echo "Remise à zéro des fichiers à supprimer"

	 else

		 echo "La liste n'a pas été remise à zéro"

	 fi

	 exit 0

	;;


	 -v )

	 echo "Liste des fichiers à supprimer :"

	 FICHIER=`more /tmp/clean`

	 echo $FICHIER

	 exit 0

	;;


	 "" )

	 clean	   

	;;


	 * )

	 if [ ! -d "$1" ]

	 then

		 usage

	 else

		 RACINNE="$1"

		 clean

	 fi

	;;	

 esac

Je l'ai testé sous UNIX et tout va bien, même les dossiers avec des noms bizarres passent.

Mais sous le syno.....la commande find ne marche pas, voici ce que j'ai quand j'entre la commande seul :

######> find /volume1/homes/ -name Thumbs.db -delete

BusyBox v1.1.0 (2009.03.06-16:49+0000) multi-call binary

Usage: find [PATH...] [EXPRESSION]

ceci est pareil avec : -ok rm -f {} \;

Avec -exec rm {} \;

Il y a un autre problème. L'option -exec à l'air d'être là puisqu'il lance bien les 'rm' mais ceux-ci on un problème avec les noms de dossiers à espaces ou autres....

Pour -ok et -delete je pense que cela est due à la version de 'find' implanté dans le syno, mais pour l'option -exec il devrait y avoir une solution, me trompe-je???????

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Ces espaces, une plaie j'vous dit.

On va monter d'un cran, alors ;)

#!/bin/sh

#

# Variable par defaut

########################


dossier="/volume1/homes"

liste=".DS_Store|Thumbs.db|desktop.ini"

fic_tmp="/tmp/toto"

#

find $dossier | egrep "$liste" | sed "s/ /?/g" > $fic_tmp

#

for bo in `cat $fic_tmp`; do

rm "$bo" > /dev/null

done

rm -f $fic_tmp

Donc, on lance une recherche de fichier que l'on filtre avec 'egrep' et sa liste.

Chaque champ/fichier doit être séparé par un '|'

On remplace également chaque espace rencontré par le caractère '?' commande 'sed'

Et on renvoie tout cela dans un fichier temporaire.

Ensuite il ne reste plus qu'a effacer en listant ce fichier

A+ :hi:

Fred.

Lien vers le commentaire
Partager sur d’autres sites

Ba pour ma pomme quand on fait (sans le -f pour voir les retours d'erreur) :

find /volume1 -type f -name Thumbs.db -exec rm {} \;

mon syno m'engueule, par exemple : Ici le dossier s'appelait 'dossier 3'

rm: cannot remove `3/Thumbs.db': No such file or directory

J'essayerais demain le truc du egrep.

Merci et bonne soirée

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

J'ai enfin réussi a trouver un peu de temps pour finir mon script. Merci Fred pour ton aide, ça m'a bien servi. Voici donc la dernière version qui est opérationnel sur DS-207+ sans ipkg :

 #!/bin/sh

 #

 # clean

 #

 # Script de nettoyage(.DS_Store;Thumbs.db;desktop.ini)

 #

 # By Djramzy Version du 6 Avril 2009

 #####################################################################


 #

 # Variable par défaut

 ########################


 # Votre dossier nettoyé par défaut lorsqu'on lance clean sans option :

 RACINNE="/volume1/homes"


 # Liste des fichiers à  effacer par défaut (séparé par des |):

 TRASH="Thumbs.db|.DS_Store|desktop.ini"


 # Version

 VERSION="Version 2.1 du script de nettoyage"


 # Répertoire temporaire

 REP_TMP="/tmp/clean_tmp"


 #

 # Fonctions

 ########################


 usage()

 {

	 echo "Usage :"

	 echo ""

	 echo "clean [-farvV] [option]"

	 echo ""

	 echo "   [dossier] : Mode normal"

	 echo "-f [dossier] : Mode force"

	 echo "-a  fichier  : Ajouter un fichier à  supprimmer"

	 echo "-r		   : Remise à  zéro des fichiers à  supprimer"

	 echo "  Par défaut : "$TRASH

	 echo "-v		   : Affiche la liste des fichiers à  supprimer"

	 echo "-V		   : Version"

	 exit 1;

 }



 creer_fichier_temp()

 {

	 if [ ! -r "/tmp/clean" ]

	 then

		 echo $TRASH > /tmp/clean

	 fi;

 }



 clean()

 {

	 LISTE=`more /tmp/clean`

	 find "$RACINNE" | egrep "$LISTE" | sed "s/ /?/g" > $REP_TMP


	 for bo in `cat $REP_TMP`;

	 do


		 echo "Voulez-vous effacer $bo ? (y/n)"

		 read reponse

		 if [ $reponse = "y" ]

		 then

			 rm -rf "$bo" > /dev/null

		 fi

	 done

	 rm -f $REP_TMP

	 exit 0

 }


 cleanf()

 {

	 LISTE=`more /tmp/clean`

	 find "$RACINNE" | egrep "$LISTE" | sed "s/ /?/g" > $REP_TMP


	 for bo in `cat $REP_TMP`;

	 do

		 rm -rf "$bo" > /dev/null

	 done

	 rm -f $REP_TMP

	 exit 0

 }




 #

 # Programme

 #########################



 creer_fichier_temp


 case $1 in


	 -f )

		 if [ "$2" ]

		 then

			 if [ ! -d "$2" ]

			 then

				 usage

			 fi

			 RACINNE="$2"

		 fi

		 cleanf

		;;


	 -V )

		 echo $VERSION

		 exit 0

		;;


	 -a )

		 if [ $2 ]

		 then

			 FICHIER=`more /tmp/clean`

			 FICHIER=$FICHIER"|"$2

			 echo $FICHIER > /tmp/clean

			 echo "Nouvelle liste des fichiers à  supprimer :"

			 echo $FICHIER

			 exit 0

		 else

			 usage

		 fi

		;;


	 -r )

		 echo $TRASH

		 echo "Voulez-vous vraiment remettre la liste par défaut ? (y/n)"

		 read reponse

		 if [ $reponse = "y" ]

		 then

			 echo $TRASH > /tmp/clean

			 echo "Remise à  zéro des fichiers à  supprimer"

		 else

			 echo "La liste n'a pas été remise à  zéro"

		 fi

		 exit 0

		;;


	 -v )

		 echo "Liste des fichiers à  supprimer :"

		 FICHIER=`more /tmp/clean`

		 echo $FICHIER

		 exit 0

		;;


	 "" )

		 clean

		;;


	 * )

		 if [ ! -d "$1" ]

		 then

			 usage

		 else

			 RACINNE="$1"

			 clean

		 fi

		;;

 esac

Pour information :

-Le mode normal demande une validation avant la suppression, le mode force ne demande rien.

-Il est possible d'ajouter des des fichier à supprimer lors du clean (commande -a, ex: clean -a @eaDir ), on peut aussi remettre la liste par défaut ( -r ).

-Pour nettoyer un autre répertoire que celui défini dans le script on peut le mettre en option lorsque l'on lance l'execution ( clean /volume1/photo ).

Merci à vous pour votre aide

Djramzy

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • 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.