utilisation de find

Le
vincent.verdon
Bonjour à tous,

j'utilise find dans un script de sauvegarde.
Le script fonctionne, mais je voudrais désormais pouvoir enlever de ma
sauvegarde certains répertoires, par exemple un répertoire nommé
"profile" qui peut être situé à différents endroits.

J'ai regardé la doc de find, et on me suggère :

find $IN -type d -path '*profile' -prune -o -exec ./copie.sh {} ;

Ca semble marcher jusque là, mais je ne comprends pas ce que représente
l'option -o et l'option -prune (en somme, j'ai recopié bêtement!).

Mais je voudrais en fait supprimer plusieurs répertoires, par exemple :
profile et tmp. Je ne sais comment écrire cela

Merci de votre aide,

Amicalement, Vincent Verdon

  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Pascal Bourguignon
Le #700408
""
Bonjour à tous,

j'utilise find dans un script de sauvegarde.
Le script fonctionne, mais je voudrais désormais pouvoir enlever de ma
sauvegarde certains répertoires, par exemple un répertoire nommé
"profile" qui peut être situé à différents endroits.

J'ai regardé la doc de find, et on me suggère :

find $IN -type d -path '*profile' -prune -o -exec ./copie.sh {} ;

Ca semble marcher jusque là, mais je ne comprends pas ce que
représente l'option -o et l'option -prune (en somme, j'ai recopié
bêtement!).

Mais je voudrais en fait supprimer plusieurs répertoires, par exemple
: profile et tmp. Je ne sais comment écrire cela...


Quand on ne met rien entre deux options, il y a un -a (and = et).

Quand on mélange des ET et des OU, ça donne quoi?

Mieux vaut mettre des parenthèses:

find $IN -type d -a ( ( -path '*profile' -a -prune )
-o ( -exec ./copie.sh {} ; ) )


--
__Pascal Bourguignon__ http://www.informatimago.com/

"Indentation! -- I will show you how to indent when I indent your skull!"

Stephane Chazelas
Le #700407
On Mon, 18 Sep 2006 13:06:19 +0200, Pascal Bourguignon wrote:
[...]
Quand on mélange des ET et des OU, ça donne quoi?


-a a higher precedance que -o.



Mieux vaut mettre des parenthèses:

find $IN -type d -a ( ( -path '*profile' -a -prune )
-o ( -exec ./copie.sh {} ; ) )
[...]


manque des quotes.

Je pense que l'idee etait:

find "$IN" -type d -path '*profile' -prune
-o -exec ./copie.sh {} ;

C'est a dire:

find "$IN" ( -type d -a -path '*profile' -a -prune )
-o -exec ./copie.sh {} ;

Le -type d etant inutile.

find "$IN" -path '*profile' -prune -o -exec ./copie.sh {} ;

Le -path n'est pas standard et -name (qui lui est standard)
aurait fait la meme chose dans ce cas.

find "$IN" -name '*profile' -prune -o -exec ./copie.sh {} ;

Pour repondre a la question.

find "$IN" ( -name '*profile' -o -name '*whatever' ) -prune
-o -exec ./copie.sh {} ;

--
Stephane

vincent.verdon
Le #700402
Bonsoir,

Merci à vous 2 de vos réponses.

Je crois commencer à comprendre comment marche find...En fait je n'avais
pas compris que l'on pouvait associer logiquement un ensemble de
conditions...

Quand vous écrivez :

find "$IN" ( -name '*profile' -o -name '*whatever' ) -prune
-o -exec ./copie.sh {} ;

cela veut dire : cherchez dans $IN les fichiers qui terminent par
profile ou par whatever (et ne rien en faire de particulier) ou pour les
autres fichiers exécuter le script copie.sh

Est-ce cela ?

Mais je m'intéresse aux répertoires uniquement, donc j'écris alors :

find "$IN" -type d -a ( ( -name '*profile' -o -name '*whatever' )
-prune
-o -exec ./copie.sh {} ; )

Vrai ??? pourquoi l'option -type d vous semblait inutile ?

Mais je ne comprends vraiment pas l'option -prune


Merci encore,
amicalement, Vincent Verdon
Stephane Chazelas
Le #700149
2006-09-18, 21:38(+02), :
Bonsoir,

Merci à vous 2 de vos réponses.

Je crois commencer à comprendre comment marche find...En fait je n'avais
pas compris que l'on pouvait associer logiquement un ensemble de
conditions...

Quand vous écrivez :

find "$IN" ( -name '*profile' -o -name '*whatever' ) -prune
-o -exec ./copie.sh {} ;

cela veut dire : cherchez dans $IN les fichiers qui terminent par
profile ou par whatever (et ne rien en faire de particulier) ou pour les
autres fichiers exécuter le script copie.sh

Est-ce cela ?
[...]


Ca veut dire descendre dans "$IN"; si le fichier/repertoire
courant se termine en profile ou whatever, alors arreter la
descente (-prune), et pour les autres fichiers/repertoires
executer ./copie.sh <fichier>


Mais je m'intéresse aux répertoires uniquement, donc j'écris alors :

find "$IN" -type d -a ( ( -name '*profile' -o -name '*whatever' )
-prune
-o -exec ./copie.sh {} ; )

Vrai ??? pourquoi l'option -type d vous semblait inutile ?


Dans ce cas, elle est utile.

Voir aussi:

find "$IN" ( -name '*profile' -o -name '*whatever' )
-prune -o -type d -exec ./copie.sh {} ;


Mais je ne comprends vraiment pas l'option -prune
[...]


Ca a une influence sur la facon dont find traverse les
repertoires. Si un repertoire est pruné, find ne descendra pas
dedans (ne considerera pas les fichiers a l'interieur).

-prune renvoie toujours "true".


--
Stéphane

Kevin Denis
Le #700147
Le 18-09-2006, a écrit :

Mais je ne comprends vraiment pas l'option -prune

prune se traduit par "elaguer". Tu parcours un arbre, mais auparavant tu

as elague une branche.

vincent.verdon
Le #700146
Merci à vous 2, j'ai tout compris !!!

Amicalement, Vincent Verdon
Poster une réponse
Anonyme