Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

utilisation de find

6 réponses
Avatar
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

6 réponses

Avatar
Pascal Bourguignon
"" writes:

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!"

Avatar
Stephane Chazelas
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

Avatar
vincent.verdon
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
Avatar
Stephane Chazelas
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

Avatar
Kevin Denis
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.

Avatar
vincent.verdon
Merci à vous 2, j'ai tout compris !!!

Amicalement, Vincent Verdon