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

Opportunité de script shell

7 réponses
Avatar
jerome moliere
Bonjour =C3=A0 tous,
je ne suis pas tr=C3=A8s scripts shells mais l=C3=A0 je soup=C3=A7onne 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=C3=A9pertoires
descendant de repos svn lesquels ne conttiennent pas un fichier donn=C3=A9
(toto.txt disons) sachant qu'ils doivent contenir un tata.txt (pour en
filtrer la majeure partie d=C3=A9j=C3=A0)

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

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

en regardant xargs je suis tomb=C3=A9 sur gnu parallel mais il ne semble
=C3=AAtre dans les repo ..c'est normal ?
j'ai trouv=C3=A9 un truc appel=C3=A9 r-cran mais est ce la m=C3=AAme 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

7 réponses

Avatar
Nicolas Bercher
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/
Avatar
Nicolas Bercher
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/
Avatar
JF Straeten
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/
Avatar
Nicolas Bercher
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/
Avatar
Nicolas Bercher
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/
Avatar
Nicolas Bercher
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/
Avatar
thierry.leurent
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=" 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';">A chaud et dans le train, je pensais a locate tata .txt, tu parcours le résultat par une boucle for, tu extraits le chem in, tu fais un ls chemin/toto.txt et tu testes le résultat. </span></ 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';">En fouillant sur le net, tu trouvera facilement les commandes. Malheureusement, je ne programme pas en bash tous les jours .</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';">Bonne chance<br><br>-- <br>Sent from my Nokia&nbsp ;N9</span></p></div><br><div id="fenix-reply-header"><p>On 8/02/12 16:20 jerome moliere wrote:<br></p></div><div id="fenix-quoted-body">Bonjour à tous,<br>je ne suis pas très scripts shells mais là je soupçonne avoir<br>l'occasion d'en faire un , du coup je ne sais pas trop comment m'y<br>prendre...<br>En gros mon besoin: je dois trouver dans qq milliers de répertoires<br>descendant de repos svn lesquels ne conttiennent pas un fichier donné<br>(toto.txt disons) sachant qu'ils doivent contenir un tata.txt (pour en<br>filtrer la majeure partie déjà)<br><br>je pensais à find mais je ne vois pas comment dire d'exclure (inclure<br>pas de souci) un pattern donné, donc fair e la négation...<br>une grosse boucle for ? ca va ramer non?<br><br>b ref votre avis m'intéresse...<br>pas de perl je suis allergique -)<br >un zsh serait il mieux armé qu'un bash pour cela ?<br><br>en regarda nt xargs je suis tombé sur gnu parallel mais il ne semble<br>êtr e dans les repo ..c'est normal ?<br>j'ai trouvé un truc appelé r-cran mais est ce la même chose ?<br><br>merci par avance<br>J.MOLI ERE - Mentor/J<br>auteur Eyrolles<br>blog: http://romjethoughts.blogspot.c om<br>OSGi book available now!!!<br><br>-- <br>Lisez la FAQ de la liste avant de poser une question :<br>http://wiki.debian.org/fr/FrenchLists<br> <br>Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe "<br>vers <br>En cas de soucis, contactez EN ANGLAIS <br>Archive: http://lists .debian.org/CAEGYFE+ .com<br><br></div><br></body></html>
--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/