Commande Find
Résolu/Fermé
baygon_jaune
Messages postés
11
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
25 novembre 2009
-
18 mars 2008 à 09:28
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 27 juil. 2008 à 09:08
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 27 juil. 2008 à 09:08
A voir également:
- Commande Find
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande chkdsk - Guide
- Commande en attente d'acceptation fnac ✓ - Forum Consommation & Internet
- 'Ls' n’est pas reconnu en tant que commande interne - Forum Windows
10 réponses
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
18 mars 2008 à 10:35
18 mars 2008 à 10:35
hello
ls -al $(find /tmp -name 'alert*' -exec grep -li "Errors" {} \;)
ls -al $(find /tmp -name 'alert*' -exec grep -li "Errors" {} \;)
baygon_jaune
Messages postés
11
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
25 novembre 2009
18 mars 2008 à 11:40
18 mars 2008 à 11:40
C'est bon !
Grand Merci ! ;-)
Grand Merci ! ;-)
baygon_jaune
Messages postés
11
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
25 novembre 2009
24 juil. 2008 à 16:58
24 juil. 2008 à 16:58
Si le find ne ramène rien, la commande ls -al affiche tous les fichiers du rep courant. Qqun a t'il une idée pour ne pas exécuter le ls -al si le find ne récupère rien ?
Merci par avance.
Loïc
Merci par avance.
Loïc
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
24 juil. 2008 à 17:22
24 juil. 2008 à 17:22
une possiblilité
find /tmp -name 'alert*' -exec grep -li "Errors" {} \; > /tmp/log1
test -s /tmp/log1 && { ls -al $(cat /tmp/log1) ; }
find /tmp -name 'alert*' -exec grep -li "Errors" {} \; > /tmp/log1
test -s /tmp/log1 && { ls -al $(cat /tmp/log1) ; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
baygon_jaune
Messages postés
11
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
25 novembre 2009
24 juil. 2008 à 18:02
24 juil. 2008 à 18:02
Mille merci. J'obtiens j'obtiens presque ce que je recherche. Toutefois j'aimerais affiner ma recherche en affichant les fichiers qui contiennent la chaine "Errors" tout en ne contenant pas une autre chaine "titi".
Merci par avance
Merci par avance
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
26 juil. 2008 à 09:50
26 juil. 2008 à 09:50
une possiblilité mais il y a sûrement plus sophistiqué
find /tmp -name 'alert*' -exec grep -li "Errors" {} \; > /tmp/log1 if [ -s /tmp/log1 ] ; then grep -ilv "titi" $(cat /tmp/log1) > /tmp/log2 cp /tmp/log2 /tmp/log1 fi test -s /tmp/log1 && { ls -al $(cat /tmp/log1) ; }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
>
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
26 juil. 2008 à 13:00
26 juil. 2008 à 13:00
Salut,
si j'ai bien compris alors ton script ne donne pas le résultat attendu
vu que grep lit ligne par ligne, il va sauter les lignes avec titi mais le fichiers sera toujours afficher s'il y a le mot Errors
Les deus fichiers sont affichés puisque ce que tu exclus c'est la ligne avec titi mais pas le fichier.
Je pense qu'il vaut mieux exclure d'abord les fichiers avec titi (qu'ils contient ou pas Errors) et ensuite chercher les fichiers avec Errors
Un exemple incomplet
Cette fois, seulement le fichier qui contient Errors sans avoir titi, est affiché.
si j'ai bien compris alors ton script ne donne pas le résultat attendu
vu que grep lit ligne par ligne, il va sauter les lignes avec titi mais le fichiers sera toujours afficher s'il y a le mot Errors
lami20j@debian:~/trash$ cat ccm.sh #!/bin/bash find /tmp -name 'alert*' -exec grep -li "Errors" {} \; > /tmp/log1 if [ -s /tmp/log1 ] ; then grep -ilv "titi" $(cat /tmp/log1) > /tmp/log2 cp /tmp/log2 /tmp/log1 fi test -s /tmp/log1 && { ls -al $(cat /tmp/log1) ; } lami20j@debian:~/trash$ cat /tmp/alert_rouge Errors titi $ cat /tmp/alert_orange Errors $ sh ccm.sh -rw-r--r-- 1 lami20j lami20j 7 2008-07-26 11:56 /tmp/alert_orange -rw-r--r-- 1 lami20j lami20j 12 2008-07-26 11:59 /tmp/alert_rouge $
Les deus fichiers sont affichés puisque ce que tu exclus c'est la ligne avec titi mais pas le fichier.
Je pense qu'il vaut mieux exclure d'abord les fichiers avec titi (qu'ils contient ou pas Errors) et ensuite chercher les fichiers avec Errors
Un exemple incomplet
$ cat /tmp/alert_orange Errors $ cat /tmp/alert_rouge Errors titi $ find /tmp -name 'alert*' -exec grep -li "titi" {} \;|xargs -I'f' mv f f_;find /tmp -name 'alert*[^_]' -exec grep -li 'Errors' {} \; /tmp/alert_orange
Cette fois, seulement le fichier qui contient Errors sans avoir titi, est affiché.
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
26 juil. 2008 à 13:54
26 juil. 2008 à 13:54
effectivement, j'ai mal interprété l'option grep -v
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
24 juil. 2008 à 18:53
24 juil. 2008 à 18:53
Une autre possibilité :
find /tmp -name 'alert*' -exec sh -c 'name=$(grep -li "Errors" "$1"); ls -al "$name" 2>/dev/null' _ {} \;;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
26 juil. 2008 à 13:02
26 juil. 2008 à 13:02
Salut,
un autre possibilité ;-))
un autre possibilité ;-))
find /tmp -name 'alert*' -exec grep -li "Errors" {} \;|xargs ls -l
baygon_jaune
Messages postés
11
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
25 novembre 2009
26 juil. 2008 à 14:03
26 juil. 2008 à 14:03
Grand merci, c'est exactement ce que je recherche : afficher les fichiers seulement "Errors" et non "Errors" + "titi"
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
27 juil. 2008 à 08:14
27 juil. 2008 à 08:14
Avec awk, qui affiche le nom du fichier si il contient error mais pas titi:
for F in $(find /tmp -name 'alert*' -print) ; do awk 'BEGIN {IGNORECASE=1 ; e=0} ; /error/ {e=1} ; /titi/ {exit 1} ; END {if(e)print FILENAME}' $F ; done | xargs ls -la
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
27 juil. 2008 à 09:08
27 juil. 2008 à 09:08
Pour ne pas être en reste... ;-))
find /tmp -name 'alert*' -exec sh -c '\ name=$(grep -li "Errors" "$1") nom=$(grep -L "titi" "$name") ls -al "$nom" 2>/dev/null' _ {} \;;-))
18 mars 2008 à 09:50
Merci quand même.