Comprendre le bitcoin, l'intelligence artificielle, faire un site web... En 3 minutes en vidéo!

Lister des choses précises en mode commande

Forum informatique > Aide GNU/Linux > Lister des choses précises en mode commande

<<<1>>>

[Page 1 sur 1 - 4 messages]
Informations Messages

Dude_Linux

Avatar de Dude_Linux
2 messages
Neurone isolé
Neurone isolé

Lien direct Le 18 Novembre 2005 à 15h43

Bonjour, j'aurais une question.

J'essaie depuis 1h de lister dans 1 fichier, les fichiers cachés seulement,
dans un autre fichier, les fichiers exécutables
et finalement dans un autre fichier, les fichiers systèmes seulements.

Comment faire?

Merci de votre aide.

 

Publicité

L'homme-poubelle

Avatar de L'homme-poubelle
39 messages
Disquette
Disquette

Lien direct Le 18 Novembre 2005 à 21h28

On peut utiliser grep et ce qu'on appelle des "expressions régulières". Si ça t'intéresse, vu que j'ai pour le moment trop la flemme de publier quelque part un tuto dessus (sans quoi je t'aurai filé un lien vers le-dit tuto pour-le-moment-inexistant), tu peux faire des recherches à ce sujet (attention, assure toi bien qu'on ne parle pas des reg exp PHP, elles sont quelques peu différentes). Tu peux aussi m'envoyer un MP pour que je te file mon adresse MSN ou autre.

Premièrement, les fichiers cachés : ce sont ceux qui commencent par un point, on est d'accord. Tu connais sans doute la manière d'envoyer le résultat d'une commande à une autre commande pour que cette dernière traite ce résultat : commande1 | commande2

Donc dans le cas de ls qui passe son résultat à grep, 'ls -a | grep machinchoz'.

grep est un programme de recherche. Il va chercher un "pattern" (je sais pas comment traduire ça) et renvoyer chaque ligne contenant le pattern. C'est assez limité comme ça : par exemple, comment préciser qu'on cherche aussi bien "le chat" que "les chats" ?

Alors arrivent les expressions régulières, dont le but est d'appliquer une sélection très puissante à un document texte, théoriquement aussi grand que tu le souhaites. Le problème de ces expressions est... qu'elles sont littéralement illisibles. C'est pourquoi je ne développerai pas trop.

On utilisera la ligne de commandes

ls -a | grep 'pattern'

où pattern sera bien sûr l'expression. Que cherchons nous : les fichiers dont le nom commence par un point '.'. Mais attention : certains noms de fichiers contiennent des points, par exemple pour leur extension. Nous devons donc préciser que nous recherchons ces points en début de ligne, ce qui se fait pour grep avec le caractère '^'

Deuxième piège, le point lui même. C'est en effet un caractère spécial pour dire "n'importe quel caractère". Nous devons donc l'échapper, ce qui fait que nous finissons par obtenir :

ls -a | grep '^\.'

Qui malheureusement liste encore les fichiers '.' et '..'. Mais on planche dessus avec un copain.

As-tu déjà compris ça ? Quel est ton niveau en shell ?

 

Dude_Linux

Avatar de Dude_Linux
2 messages
Neurone isolé
Neurone isolé

Lien direct Le 19 Novembre 2005 à 02h52

Je me débrouille un peu.

J'ai fouillé de mon côté et j'ai eu cela:

ls -aR | find .


Ça ne marche vraiment pas parfaitement, mais j'ai essayé au moins lol.

 

L'homme-poubelle

Avatar de L'homme-poubelle
39 messages
Disquette
Disquette

Lien direct Le 19 Novembre 2005 à 11h58

find est l'équivalent de grep sous DOS.

Sous les Unix, c'est un programme de recherche extrèmement puissant... mais sans indexation, et plutôt lourd. Y'a d'autres moyens que de l'utiliser.

Visiblement, tu es un débutant. C'est pas grave, faut bien commencer un jour. C'est bien de t'y intéresser.

Le second programme qui liste les fichiers exécutables va s'appuyer sur le programme test (souvent à l'emplacement '/bin/test', pour savoir où est une commande tu peux faire "which $nomdelacommande" ), auquel on peut demander de vérifier si un fichier existe, si il est exécutable, si c'est un répertoire...

On va parcourir le répertoire depuis lequel est lancé le script, à l'aide de l'instruction for... in ...; do ... done et pour chaque fichier faire deux tests : est-ce qu'il est exécutable, est-ce que ce n'est pas un répertoire. Si les deux tests sont vrais (exécutable et pas un répertoire), alors on affichera quelque chose (tu pourras modifier ce code)

Code


#!/bin/sh

for f in *
do
if [ -x "$f" ] && ! [ -d "$f" ] ; then
echo "Executable : $f"
fi
done



Voilou. Les scripts shells sont des plus pénibles à écrire, du moins je trouve. Si tu as une question..

 

<<<1>>>

[Page 1 sur 1 - 4 messages]

Forum informatique > Aide GNU/Linux > Lister des choses précises en mode commande