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+r6A...qvuzDKSyuQ@mail.gmail.com
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+r6A...qvuzDKSyuQ@mail.gmail.com

Poser une question


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/
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/
On Wed, Feb 08, 2012 at 04:41:02PM +0000, wrote:
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/
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/
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/