Page 1 sur 1

Comment supprimer plusieurs répertoires en faisant des exceptions pour certains fichiers et sous-répertoires

Posté : mer. 30 janv. 2019 11:00
par amilcar
Bonjour,
je sais même pas si j'ai le droit de poster ici ce genre de message, je tente si je suis "OFF" un gentil admin vire le topic ;)

Mon soucis. je me suis fais un petit serveur lamp, avec dedans plusieurs sites et dedans plusieurs répertoire et dedans .....
bref

je dois effacer tous les répertoire sauf certains et je sais pas comment prendre le pb

le répertoire qu'il faudrait balayé est sites de plus il faudrais exclure un sous répertoire
- sites
-- A
--- /IMG
--- /config
--- /local
--- /squelettes
--- /tmp
--- .htacess
--- .user.ini
- B
--- /IMG
--- /config
--- /local
--- /squelettes
--- /tmp
--- .htacess
--- .user.ini
- C
--- /IMG
--- /config
--- /local
--- /squelettes
--- /tmp
--- .htacess
--- .user.ini

donc supprimer tous les répertoires se trouvant dans A , B , C sauf /IMG,/config,/local,/squelettes,/tmp et les fichiers .htacess, .user.ini
sachant que le nom des répartoire A B C n'est pas connu.

moi j'été parti sur mais ça le fait pas fraudais que je liste les repertoires a effacé

Code : Tout sélectionner

 #!/bin/sh

ROOT=/home/

exception=(
	spipfactory.fr
)

# effacement éventuel fichier /site/*/plugins
for dir in "$ROOT/"web/sites/*/plugins; do
	unset aSupp
	for except in "${exception[@]}"; do
		if [[ $dir =~ /$except/ ]]; then
			aSupp=no
			continue
		fi
	done
	if [[ $aSupp != "no" ]]; then
		echo destruction "${dir}" >> "logs_$( basename "$0" )"
		rm -fr "$dir"
	fi
done
exit

je pensais me tourner vers

Code : Tout sélectionner

find ./* \( ! -name 'IMG' -a ! -name 'config' -a ! -name 'local' -a ! -name 'squelettes' - a ! -name 'tmp' -a ! -name '.htaccess' - a ! -name '.user.ini' \) -exec rm {} \;

Re: BASH

Posté : mer. 30 janv. 2019 11:03
par zeb
Salut ;)
amilcar a écrit : mer. 30 janv. 2019 11:00 je sais même pas si j'ai le droit de poster ici ce genre de message, je tente si je suis "OFF" un gentil admin vire le topic ;)
Pas de soucis, par contre le titre :l tu n'en aurais pas un plus mieux bien ? ;)

Re: BASH

Posté : mer. 30 janv. 2019 11:24
par arghlub
Salut,

Tu pourrais faire bien plus simple avec cette commande :

Code : Tout sélectionner

sudo rm -rf /chemin/vers/sites/*/!(IMG|config|local|squelettes|tmp|\\.htaccess|\\.user.ini)
/!\ Attention à la commande “rm” si elle est utilisée avec sudo, verifie à 2fois que tu as bien mis la bonne syntaxe (sans espace mal placé dans le chemin par exemple), car ça peut être très dangereux si tu fais une erreur.

Petite explication rapide de la commande :
  • rm -rf : effacer “récursivement” (en incluant les sous-répertoires) et de manière “forcée” ;
  • * : n'importe quel(s) caractère(s) ---> dans le chemin après le répertoire sites/ pour prendre en compte n'importe quel sous-répertoire ;
  • ! : négation ---> !(IMG) : fichiers (ou répertoires) dont le nom est différent de IMG ;
  • | : ou ---> !(IMG|config) : fichiers dont le nom est différent de IMG ou config ;
  • \\ : double échappement pour que le point . en début des noms de fichier (.htaccess et .user.ini) ne soit pas interprété par le Bash.
;)

Re: Comment supprimer plusieurs répertoires en faisant des exceptions pour certains fichiers et sous-répertoires

Posté : mer. 30 janv. 2019 17:19
par arghlub
zeb a écrit : mer. 30 janv. 2019 11:03par contre le titre :l tu n'en aurais pas un plus mieux bien ? ;)
Finalement je l'ai fait à la place d'amilcar car effectivement “Bash” était un titre plus que limite :l :l (@amilcar, tu pourras toujours le modifier comme tu veux). ;)

Re: Comment supprimer plusieurs répertoires en faisant des exceptions pour certains fichiers et sous-répertoires

Posté : mer. 30 janv. 2019 18:43
par amilcar
Hummmmm merci beaucoup pour la piste ...
et le petit cours fort sympathique est très utile , ça c'est de la réponse ;)

j'aime bien aussi quand on propose des alternatives le coté php par exemple

donc j'en arrive a ça, je vous le soumet avant de tester

Code : Tout sélectionner

# effacement de tous les sous répertoire de /sites sauf spipfactory.fr
# et de tous les sous répertoires et fichiers IMG, config, local, squelettes, tmp, .htaccess, .user.in
	
find . \( ! -name "spipfactory.fr" \) -exec rm -rf */!(IMG|config|local|squelettes|tmp|\\.htaccess|\\.user.ini) {} \;
et pour essayer d'expliquer
find . \( ! -name "spipfactory.fr" \) balaye tous les dossiers mais exclu spipfactory.fr
-exec execute la commande situé juste a prés
rm -rf */!(IMG|config|local|squelettes|tmp|\\.htaccess|\\.user.ini)


vous en pensez quoi ?, ça peu le faire ? ou .....

Re: Comment supprimer plusieurs répertoires en faisant des exceptions pour certains fichiers et sous-répertoires

Posté : mer. 30 janv. 2019 19:23
par arghlub
oui fais des tests en copiant ton répertoire "sites"...

mais pourquoi tu tiens absolument à faire des "find" ????
y'a pas besoin, les find c'est hyper-lourd.
un find relit tout les fichiers, inutile de faire un processus find pour l'envoyer dans un rm....
c'est pour optimiser le code bien sûr .... pourquoi faire simple quand on peut faire compliqué :roll:

un précepte de codeur est le "kiss" .... KISS= "Keep It Simple Stupid"....
un rm en une ligne suffit sans avoir besoin de se lustrer la banane. ;)

Re: Comment supprimer plusieurs répertoires en faisant des exceptions pour certains fichiers et sous-répertoires

Posté : mer. 30 janv. 2019 19:48
par amilcar
entièrement d'accord pour faire simple ... :lol:

du coup pour exclure le répertoire spipfactory.fr ?

Code : Tout sélectionner

rm -rf /chemin/vers/sites/*/!(spipfactory.fr|IMG|config|local|squelettes|tmp|\\.htaccess|\\.user.ini)
je vais tester demain .... :x


mais pourquoi suis je parti avec find ?

Re: Comment supprimer plusieurs répertoires en faisant des exceptions pour certains fichiers et sous-répertoires

Posté : mer. 30 janv. 2019 20:01
par arghlub
amilcar a écrit : mer. 30 janv. 2019 19:48 du coup pour exclure le répertoire spipfactory.fr ?

Code : Tout sélectionner

rm -rf /chemin/vers/sites/*/!(spipfactory.fr|IMG|config|local|squelettes|tmp|\\.htaccess|\\.user.ini)
voilà.... fais un test sur une copie mais je suis (quasi) sûr de moi sur cette commande simple.
amilcar a écrit : mer. 30 janv. 2019 19:48 mais pourquoi suis je parti avec find ?
je sais pas :roll: ;) ... car un "find /" analyse tous les fichiers de ton système, ça peut durer un moment. ;)