Rechercher : dans
Par :

[Bash] Lister dossiers et stocker dans un tab

Dernière réponse le 17 sep 2007 à 18:38:03 deterred, le 4 déc 2006 à 16:01:44 
 Signaler ce message aux modérateurs

Bonjour,

Je souhaiterais lister les répertoires d'un dossier, et stocker leur noms (ou chemin dans un tableau)
Ceci afin de parcourir le tableau ensuite et faire un traitement particulier.

Pouvez vous m'indiquer comment lister les répertoires d'un dossier, et stocker leur noms dans un tableau ?

Merci beaucoup

Meilleures réponses pour « [Bash] Lister dossiers et stocker dans un tab » dans :
[Windows] Obtenir la liste des fichiers d'un dossier VoirLister le contenu d'un dossier Voici une astuce simple qui permet de lister le nom des fichiers contenus dans un répertoire. Vous pourrez obtenir en un clic les titres de vos chansons, de vos photos, etc. dans un fichier...
Bash - Les paramètres VoirIntroduction Les paramètres positionnels Exemple 1 Les paramètres spéciaux Exemple 2 Initialiser des paramètres - La commande "set" - Exemples - La commande "shift" - Exemple 3 Introduction Il est possible de fournir à un script,...
Où sont stockées les photos prises avec Skype ? VoirProblème J'ai pris des photos de mes correspondants au cours d'une conversation vidéo, et par la suite je ne sais pas comment retrouver ces photos sur le disque dur. Solution Vos photos prises avec Skype sont stockées dans le dossier suivant...
Linux - Gestion des utilisateurs VoirPremier pas de l'administrateur Lorsque diverses personnes ont accès à un système, il est nécessaire que l'administrateur système gère les utilisateurs. Pour ceci, les commandes usuelles et les fichiers à configurer doivent être connus. Les...

1

kilian, le 4 déc 2006 à 22:43:26

Salut,

Pour lister les fichiers d'un dossiers c'est la commande ls.
En fait ton truc se résume à ça:

i=0
for bidule in `ls`
do
    fichier[$i]=$bidule
    ((i++))
done

Dans le tableau fichier tuas tout ce qu'il ya dans le repertoire.
Par exemple pour afficher le second fichier:
echo ${fichier[1]}

Note que je mets des accolades car sinon, l'interprétation du nom de la variable s'arrête au crochet...
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

2

deterred, le 5 déc 2006 à 16:41:00

Merci, mais

en fait je ne cherche pas à lister les fichiers, mais les dossiers ... :d

sinon pour le stockage dans le tableau merci !
reste la première partie ...

Répondre à deterred

3

kilian, le 5 déc 2006 à 20:01:22

Pour tester si un inode est un dossier ou pas on fait comme ça:

if  [ -d nom_inode ]
then
        #Truc à faire si c'est un dossier
fi

Je te laisse corriger le script ;-)
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

4

lami20j, le 5 déc 2006 à 20:09:24

Salut,

Par exemple dans le répertoire courant

#!/bin/bash

i=0
for j in $(find $PWD -type d -maxdepth 1)
do 
  rep[$i]=$(basename $j)
  ((i++))
done

echo ${rep[2]}
lami20j

Répondre à lami20j

5

kilian, le 5 déc 2006 à 20:17:10
  • +1

C'est plus propre tiens....

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

6

deterred, le 5 déc 2006 à 21:03:47

Super ! ça marche nickel avec le ls ... par contre, j'ai un souci, j'aimerais faire une fonction récursive car j'ai des opérations à faire dans chaque répertoire, voici ce que j'ai fais :

--------------

parcourir() {
dossier=$1
i=0
cd $1
for inode in `ls`
do
if [ -d $inode ]
then
dossier[$i]=$inode
echo $inode
((i++))
#MON TRAITEMENT SUR LES DOSSIERS
parcourir $dossier/$inode
fi
done
#MON TRAITEMENT SUR LES FICHIERS
}

parcourir /home/snoopy/bash



----------

le soucis c'est que mon script s'arrete au premier sous répertoire, la récursivité ne fonctionne pas !
:(
Si vous avez une idée, je suis preneur !
Merci beaucoup

Répondre à deterred

7

jipicy, le 5 déc 2006 à 21:06:37

Salut,

for inode in `ls *`
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

8

deterred, le 5 déc 2006 à 21:54:16

Oui mais non là ça ne fonctionne pas récursivement de cette façon :(

Répondre à deterred

9

kilian, le 5 déc 2006 à 22:13:24
  • +1

C'est ls -R

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

10

deterred, le 5 déc 2006 à 22:21:16

Hm non ce n'est pas ça que je veux tout à fait.
Je sais que ls -R parcours tous les dossiers de façon récursive, seulement ça ne convient pas à ce que je veux faire.

je voudrais executer ma fonction parcourir qui liste les dossiers et fichiers présent dans un répertoire, de façon récursive (en lui passant en paramètre le dossier) ...

je ne sais pas si je suis clair ...

Répondre à deterred

11

kilian, le 5 déc 2006 à 23:09:33

Ah ben dans ce cas faut que tu fasses dans ta fonction

for inode in `ls $dossier`
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

12

jipicy, le 5 déc 2006 à 23:27:34
  • +1

En faisant un compromis entre ton script et les solutions de lami20j et kilian :

#!/bin/bash

i=0
for inode in $(ls -R)
do
if
	[ -d $inode ]
then
	echo "===================================="
	echo $inode
	echo
	ls -1 $inode
	echo "===================================="
	rep[$i]=$(basename $inode)
	((i++))
fi
done
for k in $(seq $i)
do
	echo "${rep[$k]}"
done
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

13

deterred, le 6 déc 2006 à 10:06:04

Super merci !

t'es un dieu du bash :)

ou plutot je suis pas doué !

Merci de ta patience aussi ! A++

Répondre à deterred

14

lami20j, le 6 déc 2006 à 10:08:11

Salut,

t'es un dieu du bash :)

je confirme :-DDD
lami20j

Répondre à lami20j

15

jipicy, le 6 déc 2006 à 18:43:57

Va falloir que je pense sérieusement à passer mon bash moi ;-DDD

Faute d'être un "dieu", je confirme que je suis un




















vieux... de jour en jour ;-DDDDDDDDDDDDDDDDDDDDDDDDDD
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

16

ranouf, le 17 sep 2007 à 18:20:31

C étrange car lorsque j'éxécute ce script, je n'ai que les dossiers du premier niveau ...
Les dossier des seconds niveau ne correspondent a aucun type (voir http://bash-linux.com/unix-man-test-francais.html pour determiner le type d'un fichier)
Je seche, avez-vous une idée ?

Répondre à ranouf

17

 jipicy, le 17 sep 2007 à 18:38:03

Les dossier des seconds niveau ne correspondent a aucun type
Comment ça ils ne correspondent à aucun type ???
Ils correspondent à quoi alors ?

Place-toi dans un sous-répertoire et tape :

for i in *; do stat -c "%F" "$i"; done
ou
for i in *; do file "$i"; done
et dis-nous ce qu'il en est...
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy