Scritp linux ??

Résolu/Fermé
CHRIS_031 Messages postés 39 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 3 décembre 2007 - 25 nov. 2006 à 15:09
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 - 27 nov. 2006 à 22:48
bonjour a tous
voila je suis debutant en linux et pour l'ecole je doit realiser un script qui permet de lister les sous repertoire du repertoire courant et de les classer en fonction de leur droit en ecriture ou en lecture merci a tous pour votre aide
A voir également:

3 réponses

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
25 nov. 2006 à 19:54
Salut,

en fonction de leur droit en ecriture ou en lecture
Pour qui ?

Sinon, pour t'aider un peu sans toutefois faire ton exercice, regarde les pages de "man" de :
ls (-l)
grep (^d)
sort (et l'option "-k")

;-))
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
25 nov. 2006 à 23:35
Salut a tous,

J'aurais retiré ls et grep, puis ajouter man find (-type, -printf) :)
0
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 > asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022
26 nov. 2006 à 10:36
Salut à toi tout seul ;-))

Euh... ça va pas faire un peu trop de paramètres ça ???

find . -maxdepth x -type n -etc,etc... -exec ... | sort ...

;-)

Édit : Je viens de m'apercevoir que j'ai zappé l'option "-perm", donc, j'ai rien dit ;-(
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
26 nov. 2006 à 16:11
Ha ben je me sert pas même de -perm en fait :)

-maxdepth (éventuellement)
-type (surement)
-printf (aussi "%m;%p\n")

et sort ... :)
0
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 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
26 nov. 2006 à 16:22
Bien vu ;-))
0
CHRIS_031 Messages postés 39 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 3 décembre 2007 2
27 nov. 2006 à 14:51
ben en faite je connait ces commandes mais j'y pige que dalle sous linux mais bon c'est pas grave avec un peu de perseverence on va bien finir pas y arriver
merci qd meme a tous
@+
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
27 nov. 2006 à 21:47
Pourtant, tout est dans le manuel...

Pour avoir les pages man en français (au cas ou) dans une console tu fais:
$ export LANG=fr_FR.UTF-8


Pour faire une recherche dans un page man, tu tapes /ma recherche puis entré, et n pour faire défiler.

La première ligne de find:
FIND(1L)                 Manuel de l’utilisateur Linux                FIND(1L)

NOM
       find - Rechercher des fichiers dans une hiérarchie de répertoires.


La première ligne de sort:
SORT(1)                  Manuel de l’utilisateur Linux                 SORT(1)

NOM
       sort - Trier les lignes d’un fichier texte.

A partir de la, en recherchant les fichier voulu et en faisant un tri, tu devrais avoir le résultat attendu.

Les indices qu'on t'a donné:
find: -maxdepth, -type, -printf
sort: -k

Commençons par sort:
la recherche de -k dans le manuel de sort donne:
       -k POS1[,POS2]
              Une autre syntaxe possible pour indiquer les clés de  tri.   Les
              positions  des champs et des caractères sont numérotées à partir
              de 1.

Un peu plus haut dans le manuel:
       -t caractère_séparateur
              Utiliser le caractère_séparateur afin de distinguer  les  champs
              pour   rechercher  la clé de tri sur chaque ligne. Par défaut le
              séparateur de champs est une chaîne blanche entre  chaînes  non-
              blanches.  Ceci  signifie qu’avec l’entrée ‘ foo bar’, sort dis-
              tingue deux champs ‘ foo’ et ‘ bar’. Le séparateur  n’appartient
              ni au champ précédent, ni au champ suivant.

Donc, si tu passes a sort une liste contenant "permissions<séparateur>dossier", ça devrait passer.

Passons à find:
Recherche de "-maxdepth"
,
       -maxdepth n
              Descendre au plus n niveaux (n étant un entier positif ou  nul),
              dans  les  répertoires parcourus. ‘-maxdepth 0’ signifie que les
              tests et les actions ne  s’appliquent  qu’aux  arguments  de  la
              ligne de commande.

Si tu ne veut chercher que dans le répertoire courant sans aller dans les sous répertoire, -maxdepth 1 fait l'affaire.

Recherche de "-type",
       -type c
              Fichier du type c :

              b      fichier spécial en mode bloc (avec tampon)

              c      fichier spécial en mode caractère (sans tampon)

              d      répertoire

              p      tube nommé (FIFO)

              f      fichier régulier

              l      liens symbolique

              s      socket

En l'occurrence, tu cherche a trouver des dossier, donc -type d

Récapitulons:
find -maxdepth 1 -type d
te liste tout les répertoires se trouvant directement dans le répertoire courant.
Il reste a avoir l'affichage souhaité (permission<séparateur>dossier)

Recherche de "-printf",
       -printf format
              vrai ; affiche le format indiqué  sur  la  sortie  standard,  en
              interprétant  les  séquences  d’échappement  ‘\’  et  les direc-
              tives‘%’.  La largeur et la précision des  champs  peuvent  être
              spécifiés  comme  dans la fonction printf(3) du langage C.  Con-
              trairement à -print, -printf n’ajoute pas de saut de ligne à  la
              fin  de la chaîne. Les séquences d’échappement et les directives
              % sont les suivantes :

              \a     Sonnerie.

              \b     Effacement Arrière (Backspace)

              \c     Arrêter immédiatement l’impression du format et vider  le
                     flux de sortie.

              \f     Saut de page
              ...

En lisant le tout, tu reperes pour le format, les deux directives suivantes:
              %m     Bits d’autorisation d’accès au fichier (en octal).
              %p     Nom du fichier.

La commande find précédente devient
find -maxdepth 1 -type d -printf "%m;%p\n"
(séparateur de champ: ";")
Qui te retourne quelque chose du genre:
700;.
755;./.icons
700;./.gconfd
775;./.mozilla
700;./.metacity
700;./.gnome
775;./.gdesklets


Combiné a sort vu plus haut,
find -maxdepth 1 -type d -printf "%m;%p\n" | sort -t";" -k1


Tu obtiens:
700;.
700;./.gconfd
700;./.metacity
700;./.gnome
755;./.icons
775;./.mozilla
775;./.gdesklets
Ce qui ressemble a la liste désirée ordonnée par droits d'accés, aprés libre a toi de retravailler la sortie :)
0
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 nov. 2006 à 22:36
Tu devrais passer plus souvent toi, surtout si t'as de belles explications comme ça dans tes bagages ;-))
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
27 nov. 2006 à 22:48
Ben en fait, c'est plus le temps qui me fait défaut que les explications. Mais ça fait plaisir une fois de temps en temps, ça détend :)
0
CHRIS_031 Messages postés 39 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 3 décembre 2007 2
27 nov. 2006 à 22:36
encore merci a tous si la la je ne m'en sort pas je part en boucherie
lol
merci beaucoup pour votre aide si precieuse
@+
0