Commande Find
Résolu
baygon_jaune
Messages postés
12
Statut
Membre
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,
Je suis débutant sous unix. Voici la commande me permettant de chercher dans /tmp tous les fichiers commençant par "alert" et qui ont la chaîne "Errors" :
find /tmp -name 'alert*' -exec grep -li "Errors" {} \;
Cette commande me retourne le nom du fichier répondant aux critères. Mais je cherche à intégrer un "ls -al" afin d'avoir + d'informations sur ces fichiers : les droits, la date de modification ...
Comment faire ?
Merci par avance.
Loïc
Je suis débutant sous unix. Voici la commande me permettant de chercher dans /tmp tous les fichiers commençant par "alert" et qui ont la chaîne "Errors" :
find /tmp -name 'alert*' -exec grep -li "Errors" {} \;
Cette commande me retourne le nom du fichier répondant aux critères. Mais je cherche à intégrer un "ls -al" afin d'avoir + d'informations sur ces fichiers : les droits, la date de modification ...
Comment faire ?
Merci par avance.
Loïc
A voir également:
- Commande Find
- Invite de commande - Guide
- Commande terminal mac - Guide
- Find and mount - Télécharger - Récupération de données
- Diskpart commande - Guide
- Commande dism - Guide
10 réponses
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
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
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
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é.
Une autre possibilité :
find /tmp -name 'alert*' -exec sh -c 'name=$(grep -li "Errors" "$1"); ls -al "$name" 2>/dev/null' _ {} \;;-))
Grand merci, c'est exactement ce que je recherche : afficher les fichiers seulement "Errors" et non "Errors" + "titi"
Merci quand même.