Opportunité de script shell

Le
jerome moliere
Bonjour à tous,
je ne suis pas très scripts shells mais là je soupçonne avoi=
r
l'occasion d'en faire un , du coup je ne sais pas trop comment m'y
prendre
En gros mon besoin: je dois trouver dans qq milliers de répertoires
descendant de repos svn lesquels ne conttiennent pas un fichier donné
(toto.txt disons) sachant qu'ils doivent contenir un tata.txt (pour en
filtrer la majeure partie déjà)

je pensais à find mais je ne vois pas comment dire d'exclure (inclure
pas de souci) un pattern donné, donc faire la négation
une grosse boucle for ? ca va ramer non?

bref votre avis m'intéresse
pas de perl je suis allergique -)
un zsh serait il mieux armé qu'un bash pour cela ?

en regardant xargs je suis tombé sur gnu parallel mais il ne semble
être dans les repo ..c'est normal ?
j'ai trouvé un truc appelé r-cran mais est ce la même chose =
?

merci par avance
J.MOLIERE - Mentor/J
auteur Eyrolles
blog: http://romjethoughts.blogspot.com
OSGi book available now!!!

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/CAEGYFE+r6AW--7ioNrcRH5FMf5qePkX7dRrir8dOqvuzDKSyuQ@mail.gmail.com
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas Bercher
Le #24231111
jerome moliere a écrit :
Bonjour à tous,
je ne suis pas très scripts shells mais là je soupçonne avoir
l'occasion d'en faire un , du coup je ne sais pas trop comment m'y
prendre...
En gros mon besoin: je dois trouver dans qq milliers de répertoires
descendant de repos svn lesquels ne conttiennent pas un fichier donné
(toto.txt disons) sachant qu'ils doivent contenir un tata.txt (pour en
filtrer la majeure partie déjà)

je pensais à find mais je ne vois pas comment dire d'exclure (inclure
pas de souci) un pattern donné, donc faire la négation...
une grosse boucle for ? ca va ramer non?

bref votre avis m'intéresse...
pas de perl je suis allergique -)
un zsh serait il mieux armé qu'un bash pour cela ?

en regardant xargs je suis tombé sur gnu parallel mais il ne semble
être dans les repo ..c'est normal ?
j'ai trouvé un truc appelé r-cran mais est ce la même chose ?



Voici, je pense une solution avec un find et une fonction bash:

Soit l'arborescence suivante:

$ find
.
./a
./a/b
./a/b/c
./a/b/c/tata.txt
./a/b/c/toto.txt
./a/b/tata.txt
./a/toto.txt

et le script suivant:
---------------8<---------------
#!/bin/bash
#
# name: testifandifnot
#

function dirok () {
[ -f "${1}"/tata.txt ] && [ ! -f "${1}"/toto.txt ] && echo "${1}"
}
export -f dirok

find . -type d -exec bash -c 'dirok "$1"' _ {} ;

---------------8<---------------

Voici le résultat:

$ ./testifandifnot
./a/b

$ ls -1 ./a/b
c
tata.txt


Est-ce bien cela?

Nicolas

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Nicolas Bercher
Le #24231341
a écrit :
Un gd merci nicolas
C est cela
Je me suis fait une appli java qui donne la meme chose...mais je suis decu de ne pas pouvoir combiner des criteres complexes dans find



Et oui! Mais on peut aussi faire des choses très complexes avec find,
mais seulement sur un seul chemin à la fois et son résultat est de la
forme:

j'imprime le chemin s'il valide les critères

ou

je n'imprime rien sinon

Et puis ce n'est pas non plus un langage de programmation!

Nicolas

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
JF Straeten
Le #24231321
Re,

On Wed, Feb 08, 2012 at 04:41:02PM +0000, wrote:

Je me suis fait une appli java qui donne la meme chose...mais je
suis decu de ne pas pouvoir combiner des criteres complexes dans
find



Avec find, tu peux nier une condition de la recherche avec "!".


:/tmp$ find a/ ! -iname "toto.txt"
a/
a/b
a/b/c
a/b/c/tata.txt

:/tmp$ find a/ ! -iname "toto.txt" -o -iname "tata.txt"
a/
a/b
a/b/c
a/b/c/tata.txt

:/tmp$ find a/ -iname "toto.txt" -o -iname "tata.txt"
a/toto.txt
a/b/c/toto.txt
a/b/c/tata.txt


Faut voir si t'arriver à crafter la recherche exacte que tu veux avec
ça...

Hih,


--

JFS.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Nicolas Bercher
Le #24231841
JF Straeten a écrit :
Re,

On Wed, Feb 08, 2012 at 04:41:02PM +0000, wrote:

Je me suis fait une appli java qui donne la meme chose...mais je
suis decu de ne pas pouvoir combiner des criteres complexes dans
find



Avec find, tu peux nier une condition de la recherche avec "!".


:/tmp$ find a/ ! -iname "toto.txt"
a/
a/b
a/b/c
a/b/c/tata.txt

:/tmp$ find a/ ! -iname "toto.txt" -o -iname "tata.txt"
a/
a/b
a/b/c
a/b/c/tata.txt

:/tmp$ find a/ -iname "toto.txt" -o -iname "tata.txt"
a/toto.txt
a/b/c/toto.txt
a/b/c/tata.txt


Faut voir si t'arriver à crafter la recherche exacte que tu veux avec
ça...



C'est équivalent à -not il me semble. Mais il me semble de toutes
manières que le problème n'est pas solvable avec find seul car il ne
peut pas faire un test simultanné sur deux path.

Si tu tests un path et qu'il matche tata.txt, nécessairement, il ne
matchera pas toto.txt, tous ces tests sont indépendants, on ne peut donc
pas tester simultanément la présence ou non de deux fichiers en même
temps avec find.

Par contre, en travaillant sur les répertoires et en invoquant -exec
sur une commande qui elle peut analyser le contenu d'un répertoire, cela
fonctionne.

Nicolas

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Nicolas Bercher
Le #24231831
JF Straeten a écrit :
Re,

On Wed, Feb 08, 2012 at 04:41:02PM +0000, wrote:

Je me suis fait une appli java qui donne la meme chose...mais je
suis decu de ne pas pouvoir combiner des criteres complexes dans
find



Avec find, tu peux nier une condition de la recherche avec "!".


:/tmp$ find a/ ! -iname "toto.txt"
a/
a/b
a/b/c
a/b/c/tata.txt

:/tmp$ find a/ ! -iname "toto.txt" -o -iname "tata.txt"
a/
a/b
a/b/c
a/b/c/tata.txt

:/tmp$ find a/ -iname "toto.txt" -o -iname "tata.txt"
a/toto.txt
a/b/c/toto.txt
a/b/c/tata.txt


Faut voir si t'arriver à crafter la recherche exacte que tu veux avec
ça...



C'est équivalent à -not il me semble. Mais de toutes manières le
problème n'est pas solvable avec find tout seul car il ne peut tout
simplement pas faire un test simultané sur deux path à la fois!

find ne fait que de lister l'un après l'autre les fichiers qu'il
rencontre dans sa descente récursive et leur applique une batterie de
tests, il ne peut donc pas appliquer un test à un fichier voisin de
celui qu'il est en train de tester.

Si tu tests un path et qu'il matche tata.txt, nécessairement, il ne
matchera pas toto.txt, tous ces tests étant indépendants. On ne peut
donc pas tester simultanément la présence ou non de deux fichiers en
même temps avec find.

Par contre, en travaillant sur les répertoires --type d) et en invoquant
-exec sur une commande qui elle peut analyser le contenu d'un
répertoire, cela fonctionne.

Nicolas

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Nicolas Bercher
Le #24232011
Désolé, il semblerait qu'icedove me joue des tours, veuillez ignorer mon
e-mail de 19h49 qui n'était qu'un brouillon.

Nicolas

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
thierry.leurent
Le #24232111
This is a multipart message in Mime 1.0 format

--qmf:846811971pVTN444ulCK/Q03+/QjHdg= Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Bonjour,

Et python ?
A chaud et dans le train, je pensais a locate tata.txt, tu parcours le r ésultat par une boucle for, tu extraits le chemin, tu fais un ls chem in/toto.txt et tu testes le résultat.
En fouillant sur le net, tu trouvera facilement les commandes. Malheureuse ment, je ne programme pas en bash tous les jours.

Bonne chance

--
Sent from my Nokia N9


On 8/02/12 16:20 jerome moliere wrote:

Bonjour à tous,
je ne suis pas très scripts shells mais là je soupçonne avo ir
l'occasion d'en faire un , du coup je ne sais pas trop comment m'y
prendre...
En gros mon besoin: je dois trouver dans qq milliers de répertoires
descendant de repos svn lesquels ne conttiennent pas un fichier donné
(toto.txt disons) sachant qu'ils doivent contenir un tata.txt (pour en
filtrer la majeure partie déjà)

je pensais à find mais je ne vois pas comment dire d'exclure (inclure
pas de souci) un pattern donné, donc faire la négation...
une grosse boucle for ? ca va ramer non?

bref votre avis m'intéresse...
pas de perl je suis allergique -)
un zsh serait il mieux armé qu'un bash pour cela ?

en regardant xargs je suis tombé sur gnu parallel mais il ne semble
être dans les repo ..c'est normal ?
j'ai trouvé un truc appelé r-cran mais est ce la même chose ?

merci par avance
J.MOLIERE - Mentor/J
auteur Eyrolles
blog: http://romjethoughts.blogspot.com
OSGi book available now!!!

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/CAEGYFE+r6AW--7ioNrcRH5FMf5qePkX7dRrir8dO




--qmf:846811971pVTN444ulCK/Q03+/QjHdg= Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<html><head><style type="text/css">body, p, li { font-family: NokiaPureT extLight; }</style></head><body><div id="fenix-user-content">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-ri ght:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family :'NokiaPureTextLight';">Bonjour,</span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'NokiaPureTextLight';"><br></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-ri ght:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family :'NokiaPureTextLight';">Et python ?</span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'NokiaPureTextLight';"><br></p>
--qmf:846811971pVTN444ulCK/Q03+/QjHdg==--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Publicité
Poster une réponse
Anonyme