Précédent   Forum des professionnels en informatique > Systèmes > Linux > Distributions > Ubuntu
Ubuntu Vos questions sur les distributions Ubuntu et dérivées (Kubuntu, Xubuntu... )
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 08/01/2010, 21h53   #1
Membre confirmé
 
Avatar de mouss4rs
 
Inscription : janvier 2008
Messages : 524
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 524
Points : 207
Points : 207
Par défaut lister que les répertoires

Bonsoir,

J'aimerai n'affiche avec un ls que les répertoires.
cad que quand je fait un ls -l, le premier caractère de la 1ère ligne désigne le type de fichier (si c'est un dossier "d" ou un fichier "-").
Y'a-t-il une option du ls ou une solution adapté pour lister que les repertoires d'un répertoire courant ?

merci d'avance
mouss4rs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 23h12   #2
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 472
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 472
Points : 4 097
Points : 4 097
Salut,

une manière de faire:

Code :
1
2
 
ls -l | grep ^d | tr -s ' ' ' ' |cut -d' ' -f8
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 23h26   #3
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 896
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 896
Points : 3 676
Points : 3 676
Bonjour,

Code :
1
2
3
4
5
6
ls -d */
dir1/ dir2/
 
ls -d1 */
dir1/
dir2/
On peut mettre */ dans une variable, ou un tableau, et utiliser echo, ou printf '%s\n'
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2010, 00h21   #4
Membre confirmé
 
Avatar de mouss4rs
 
Inscription : janvier 2008
Messages : 524
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 524
Points : 207
Points : 207
Mygale1978 c'est pas ca car cela m'affiche les horaires de créations des fichiers
Pour N_BAH, c'estca mais le contexte est différent.
En fait, j'ai un fichier comme ceci:
Code :
1
2
3
-rw-r--r-- 1 blec blec   0 jan 5 16:45 fic
lrwxrwxrwx 1 blec blec   3 jan 5 16:55 l2
drwxr-xr-x 1 blec blec  48 jan 5 16:57 machin
et j'aimerai que mon programme c affiche le type de chaque ligne de fichier
comme ceci:

Code :
1
2
3
fic est un fichier
l2 est un lien symbolique
machin est un dossier
sachant que le type de fichier est au début de la ligne et le nom du fichier en dernier.

Comment faire ?

nb: Voici ce que je fais déja

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#include <fcnlt.h>
#include <unistd.h>

int main(){

open("fichier.txt",O_CREAT|O_RDWR,0777);
execl("/bin/ls","ls",NULL);
execl("/bin/cat","cat","fichier.txt",NULL);
.
.
ici, tester les lignes du fichier pour afficher les types et le nom des fichiers
.
.

}
Une idée ?

Merci d'avance
mouss4rs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2010, 00h27   #5
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 472
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 472
Points : 4 097
Points : 4 097
Citation:
Envoyé par mouss4rs Voir le message
Mygale1978 c'est pas ca car cela m'affiche les horaires de créations des fichiers
comme ceci:
Si -f8 est = à l'heure de création chez toi, il suffit de décaler d'un champ (-f9) dans ton cas

Sinon pour ton problème, tu peux facilement le réaliser avec un script shell.

Code :
1
2
3
4
5
6
7
 
for contenu in `ls` 
do 
[ -f "$contenu" ] && echo "$contenu est fichier"
[ -d "$contenu" ] && echo "$contenu est un repertoire"
[ -L "$contenu" ] && echo "$contenu est un lien symbolique"
done
__________________
Alea Jacta Test!

Dernière modification par Mygale1978 ; 09/01/2010 à 00h40.
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2010, 00h37   #6
Membre confirmé
 
Avatar de mouss4rs
 
Inscription : janvier 2008
Messages : 524
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 524
Points : 207
Points : 207
J'ai compris merci ca marche.
Mais le problème c'est que je fais un programme en c.
j'ai du mal à faire une boucle for dans ce cas pour tester toutes les lignes et afficher le résultat comme indiqué:
Code :
1
2
3
fic est un fichier
l2 est un lien symbolique
machin est un dossier
Si quelq'un a une solution, je suis preneur
mouss4rs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2010, 00h47   #7
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 693
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 693
Points : 2 068
Points : 2 068
Citation:
Envoyé par mouss4rs Voir le message
J'ai compris merci ca marche.
Mais le problème c'est que je fais un programme en c.
j'ai du mal à faire une boucle for dans ce cas pour tester toutes les lignes et afficher le résultat comme indiqué:
Code :
1
2
3
fic est un fichier
l2 est un lien symbolique
machin est un dossier
Si quelq'un a une solution, je suis preneur
ce que tu veux faire correspond à la commande file ou stat si j'ai bien compris.
http://linux.die.net/man/2/stat
http://www.linux-kheops.com/doc/man/...n2/stat.2.html
http://www.linux-kheops.com/doc/man/...n1/file.1.html


concernant le parcours d'un répertoire tu peux trouver ton bonheur avec les fonctions suivante
http://pwet.fr/man/linux/fonctions_b...heques/opendir
http://pwet.fr/man/linux/fonctions_b...eques/closedir
http://pwet.fr/man/linux/fonctions_b...heques/readdir

Dernière modification par jabbounet ; 09/01/2010 à 01h03.
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2010, 11h33   #8
Membre confirmé
 
Avatar de mouss4rs
 
Inscription : janvier 2008
Messages : 524
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 524
Points : 207
Points : 207
oui, c'est bien ca Mygale1978 !
sauf que la c'est un shell alors que moi c'est un programme c qui doit l'éxecuté.

Je sais pas comment m'y prendre , j'ai jamais fait ça !

faut-il le faire avec execv(), du genre:
Code :
1
2
char *argv[] = { "for contenu in `ls`", "do", NULL },{ "-d", "$contenu est un dossier", NULL }, { "-f","$contenu est un fichier", NULL },{ "-l", "$contenu est un lien symbolique", NULL },{ "done", NULL, NULL };
execv ( "/bin/ls", argv);
pour jabounet, c'est pas vraiment avec le file ou le stat que je ne connais meme pas.
merci quand même.
Une solution ?

Dernière modification par mouss4rs ; 09/01/2010 à 11h50.
mouss4rs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2010, 10h55   #9
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 693
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 693
Points : 2 068
Points : 2 068
Citation:
Envoyé par mouss4rs Voir le message
pour jabounet, c'est pas vraiment avec le file ou le stat que je ne connais meme pas.
merci quand même.
Une solution ?
as tu executé file sur différent type de fichier (répértoire, lien symboliques,...)?

dans la page de man de stat il y'a des macro
Citation:
...
Les macros POSIX suivantes sont fournies pour vérifier le type de fichier :

S_ISLNK(m)
est-ce un lien symbolique ?
S_ISREG(m)
un fichier régulier ?
S_ISDIR(m)
un répertoire ?
S_ISCHR(m)
...
ce qui me semble répondre a ton besoin
Citation:
Mais le problème c'est que je fais un programme en c.
j'ai du mal à faire une boucle for dans ce cas pour tester toutes les lignes et afficher le résultat comme indiqué:
Code :

fic est un fichier
l2 est un lien symbolique
machin est un dossier

Si quelq'un a une solution, je suis preneur
ou alors je n'ai rien compris.....

Dernière modification par jabbounet ; 10/01/2010 à 11h12.
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2010, 11h35   #10
Membre confirmé
 
Avatar de mouss4rs
 
Inscription : janvier 2008
Messages : 524
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 524
Points : 207
Points : 207
en fait c'est un programme en c et non pas un script.
mouss4rs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2010, 11h43   #11
Membre confirmé
 
Avatar de mouss4rs
 
Inscription : janvier 2008
Messages : 524
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 524
Points : 207
Points : 207
Au faite, Pour Mygale1978, on peut faire san le tr cad:
Code :
ls -l | grep ^d |cut -d' ' -f8
Pour revenir a mon programme, c'est un programme en c et non pas un script.
Il faut que j'écrive un programme en c qui lit un fichier texte dont les lignes ressemblent acelles affichés par un ls -l genre:

Code :
1
2
3
-rw-r--r-- 1 blec blec  0 janv 5 16:47 fic
lrwxrwxrwx 1 blec blec 3  janv 5 16:55 l2
drwxr-xr-x 2 blec blec 48 janv 5 16:47 machin
le programme doit afficher:

Code :
1
2
3
fic est un fichier
l2 est un lien symbolique
machin est un dossier
Voilà, je préfère le poster ailleurs car ceci concerne la programmation en c.
a moins que, vous savez comment faire ?

merci d'avance

Dernière modification par mouss4rs ; 11/01/2010 à 00h09.
mouss4rs est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 10h59.


 
 
 
 
Partenaires

Hébergement Web