Shell bash analyse fichier

Fermé
benji54000 Messages postés 16 Date d'inscription samedi 4 juillet 2009 Statut Membre Dernière intervention 16 mars 2014 - 31 oct. 2012 à 19:31
 Utilisateur anonyme - 2 nov. 2012 à 18:00
Bonjour,

Débutant en scripting linux sous bash, je souhaite créer un script qui scan le contenu des fichiers à l'aide de grep et qui ensuite effectue des manipulations sur ses fichiers.
Un exemple : si je fais un grep "virus" * dans mon script le problème étant qu'il me retournes évidemment les fichiers ou il y a la chaîne de caractère virus dedans mais évidemment le script aussi puis qu'il y la fameuse ligne grep "virus" * donc voici mes deux problèmes :

- de un comment faire pour ignorer mon script avec un grep ?

- de deux comment faire pour que mon script reprenne les noms des fichiers retournés par le grep et les déplacent ensuite dans un autre dossier ?
S'il vous plaît aidez-moi ...

Merci d'avance.

Cordialement
Benji54000


A voir également:

7 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
31 oct. 2012 à 19:57
Salut,

- de un comment faire pour ignorer mon script avec un grep ?
Il suffit de mettre ton script dans un autre répertoire et d'y inclure le répertoire de recherche, soit en dur soit en paramètre.

- de deux comment faire pour que mon script reprenne les noms des fichiers retournés par le grep et les déplacent ensuite dans un autre dossier ?
man grep pour les options !
Et notamment l'option "-l" (c'est un ELLE minuscule et pas un UN (1))

0
Utilisateur anonyme
31 oct. 2012 à 21:41
- de un comment faire pour ignorer mon script avec un grep ?
man grep
et faire une recherche sur le terme «exclude»
0
benji54000 Messages postés 16 Date d'inscription samedi 4 juillet 2009 Statut Membre Dernière intervention 16 mars 2014
1 nov. 2012 à 12:12
Merci beaucoup à vous d'avoir répondu si vite je vais regarder tout ça de plus près :)
0
benji54000 Messages postés 16 Date d'inscription samedi 4 juillet 2009 Statut Membre Dernière intervention 16 mars 2014
2 nov. 2012 à 12:54
Bonjour,

j'ai trouvé ! find /chemin/rep -name "*" -exec grep -Hn "string" {} \; voilà ce qui me fallait après avoir déplacer mon script dans un autre dossier ! il me manque juste une petite chose créer un log dans lequel on pourra voir tout ce qui fonctionne ou pas dans mon script . J'ai déjà testé script.sh >> journal.log mais évidemment sa ne fait que recopier mon script dans un log , moi je voudrais que le log enregistre vraiment tout ce qui s'inscrit dans le terminal au fur et à mesure que le script s'exécute.


Merci d'avance.

Cordialement

Benji54000
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
2 nov. 2012 à 13:21
Salut,

Rajoutes ça après le shebang de ton script :

exec > journal.log
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
si tu n'as pas de critère pour -name, alors autant ne pas mettre cette directive.

d'ailleurs, à quoi sert ce find ?
sans avoir à déplacer ton script, tu aurais pu faire quelque chose comme ça:
grep --recursive --exclude="monScript" 'string' ./


je voudrais que le log enregistre vraiment tout ce qui s'inscrit dans le terminal au fur et à mesure que le script s'exécute.
pour quoi faire?
0
benji54000 Messages postés 16 Date d'inscription samedi 4 juillet 2009 Statut Membre Dernière intervention 16 mars 2014
2 nov. 2012 à 17:07
Re bonjour,

j'ai testé le exec >journal.log et malheureusement sa ne marche pas du tout comme je veux , ça éxécute le script mais après sa bug plus rien dans le terminal... c'est comme un read en boucle ... sa enregistre tout ce qui ce passe dans un log sa c'est cool mais dans le terminal on ne voit plus rien...
Et malheureusement je suis toujours bloqué sur le find /chemin/rep -name "*" -exec grep -Hn "string" {} \; parce que au lieu de me prendre les fichiers du dossiers que je lui ai indiqué avec le find il va me prendre tous les fichiers du systèmes, toutes les images , toutes les musiques , etc etc etc... et les déplacer :

mv 'find shell_tri -name "*" -exec grep -l -Hn "virus" {} \;' -t
shell_tri/corbeille

Donc qu'il me les déplacent dans le bon répertoire ça c'est cool mais le problème étant qu'il ne va pas au départ chercher dans un répertoire précis ... il va chercher dans tous le pc...

Merci d'avance.

Benji54000.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
2 nov. 2012 à 17:28
J'ai testé le exec >journal.log et malheureusement sa ne marche pas du tout comme je veux , ça éxécute le script mais après sa bug plus rien dans le terminal... c'est comme un read en boucle ... sa enregistre tout ce qui ce passe dans un log sa c'est cool mais dans le terminal on ne voit plus rien...
Bon, vire le "exec ..." et lances ton script comme ça :

./ton_script | tee -a journal.log


Et malheureusement je suis toujours bloqué sur le find /chemin/rep -name "*" -exec grep -Hn "string" {} \; parce que au lieu de me prendre les fichiers du dossiers que je lui ai indiqué avec le find il va me prendre tous les fichiers du systèmes, toutes les images , toutes les musiques , etc etc etc... et les déplacer :
Euh... tu dois avoir une erreur de syntaxe dans ton script (du style un espace après un slash dans un chemin) ;-((

La syntaxe : find /chemin/rep -name "*" -exec grep -Hn "string" {} \; ne peut en aucun cas te renvoyer autre chose que les fichiers contenus dans "/chemin/rep".
0
Utilisateur anonyme
2 nov. 2012 à 18:00
benji54000,

t'es pigiste? t'es payé au caractère?
il sert à rien le find!
et le -H et le -n du grep non plus.
mv $(grep --recursive --files-with-matches --exclude="monScript" 'string' ./) --target-directory="/path/ailleurs"
0