Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/04/2006, 16h34   #1
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 489
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 489
Points : 9 638
Points : 9 638
Par défaut Option -prune avec la commande find

Bonjour,

Précision : je suis sous Solaris 5.8

J'ai des soucis avec l'option -prune de find :

Je cherche en fait à lister tous les fichiers sauf les .o à partir de . sauf ceux des répertoire CVS et Tests

Donc j'ai regardé le man, et on trouve cet exemple :

Code :
find . -name CVS -prune -o -print
ce qui fonctionne très bien.


En m'en inspirant, je suis donc arrivé à ceci :

Code :
find . -name "CVS" -prune -o -name "Tests" -prune -o -type f ! -name "*.o"
ceci fonctionne presque, mais ca m'affiche le nom des répertoire (mais ne liste pas leur contenu, ce qui est déjà pas mal).

Quelqu'un verrait-il où se situe mon erreur, ou tout du moins coment faire pour n'afficher que les fichiers ?

Merci
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 16h45   #2
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 180
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 180
Points : 2 442
Points : 2 442
Vu la spécif, je ferai plutôt un :
Code :
find . -name "CVS" -prune -o -name "Tests" -prune -o -name "*.o" -prune -o -type f -print
Mais je n'ai pas de Solaris pour vérifier ...
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 16h52   #3
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 245
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 245
Points : 1 902
Points : 1 902
Dans un script que j'ai fait il y a longtemps, j'ai une ligne comme ça :
Code :
find /home /partages \( -path '/partages/quarantine' -or -path '/partages/clamav' -or -path '/partages/info' -or -path '/partages/sauve' \) -prune -or -type f \( -mtime -1 -or -ctime -1 \) -printf %p: > $fictemp
ça peut paraître un peu bizarre mais prune si je me souviens inverse une sélection, c'est pour cette raison que les OU logiques se tranforment en ET logiques

Ici, on cherche tous les fichiers de /home et de /partages en excluant /partages/quarantine,/partages/clamav,/partages/info,/partages/sauve qui sont de type fichier dont la date de modiciation ou de création date de moins d'un jour.

J'espère que ça fait avancer le schmilblick
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 16h59   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
je pense que tu l'as compris, il te faut des parenthèses
Code :
1
2
 
find . \( \( -name CVS -o -name Tests \) -prune \) -o -type f ! -name "*.o"
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 17h17   #5
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 489
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 489
Points : 9 638
Points : 9 638
Citation:
Envoyé par laurentschneider
je pense que tu l'as compris, il te faut des parenthèses
Code :
1
2
 
find . \( \( -name CVS -o -name Tests \) -prune \) -o -type f ! -name "*.o"
Sur ma machine, le résultat est le même qu'avec la commande que j'ai tapée ci-dessus, à savoir que le nom des répertoire est affiché :
Code :
1
2
3
4
5
 
./General_conf/objs/Makefile
./Tests
./catalogs/CVS
./catalogs/Makefile
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 17h20   #6
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 489
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 489
Points : 9 638
Points : 9 638
Citation:
Envoyé par 2Eurocents
Vu la spécif, je ferai plutôt un :
Code :
find . -name "CVS" -prune -o -name "Tests" -prune -o -name "*.o" -prune -o -type f -print
Mais je n'ai pas de Solaris pour vérifier ...
Ceci fonctionne très bien, merci beaucoup. Il ne me reste plus qu'à pratiquer pour arriver à écrire cette ligne directement la prochaine fois
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 17h32   #7
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 180
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 180
Points : 2 442
Points : 2 442
Citation:
Envoyé par gangsoleil
Ceci fonctionne très bien, merci beaucoup. Il ne me reste plus qu'à pratiquer pour arriver à écrire cette ligne directement la prochaine fois
Si ça peut t'aider, voici la logique avec laquelle je l'ai construite
On part de . :On ne descendra pas dans CVS :Ni dans Tests :
Code :
-name "Tests" -prune -o
On ne prendra pas les .o :Et seuls les fichiers nous intéressent :Comme, bien sûr, on veut le résultat :J'ai préféré faire un -prune aussi sur les .o, plutôt qu'une négation de prédicat dont je ne savais pas comment elle entrerait en conjonction avec les autres.

Si ça fonctionne, c'est presque par excès de prudence
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 17h43   #8
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 245
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 245
Points : 1 902
Points : 1 902
Pas bien de faire les exercices des autres ...
Nan chuis pas jaloux !
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h53.


 
 
 
 
Partenaires

Hébergement Web