Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 18/02/2011, 10h06   #1
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 105
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 105
Points : 32
Points : 32
Par défaut [noob] Extraire les noms des fichiers pour les utiliser en variable

Bonjour à tous
Alors je suis un bon noob de Shell, je précise (mon domaine c'est plus le Java ). J'ai compris comment cela fonctionnait mais là j'ai du mal à m'en sortir car je ne connais pas les fonctions linux qu'il faudrait que j'utilise donc si vous pouviez m'aider...
Donc j'ai un rep A avec plein de sous rep, Ab, Ac, Ad, etc. Dans chaque sous-rep je peux avoir, 0 ou X fichiers zip.
J'aimerais dans le script, parcourir l'ensemble de ces sous rep et stocker dans un tableau le nom du sous rep ainsi que le nom du fichier trouvé.
Donc en gros qu'à la fin, j'ai en variable un tableau qui contiendra :
Ab toto.zip
Ab maman.zip
Ac haha.zip
Ae alphone;zip
Ae baba.zip
etc etc, pour qu'ensuite je puisse faire des traitements sur chacun de ces fichiers

Je ne demande pas une solution complète au problème (encore que si vous avez ça sous la main) mais au moins me guider dans les fonctions à utiliser car pour l'instant je sèche de ce coté là

Merci
Sylver--- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 10h19   #2
Membre Expert
 
Avatar de ManusDei
 
Homme
Étudiant
Inscription : février 2010
Messages : 670
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2010
Messages : 670
Points : 1 046
Points : 1 046
Il va te falloir utiliser "ls -l" qui renvoie une liste des fichiers présents dans le dossier (un par ligne) et "cut -f" qui permet de découper une ligne.

N'ayant pas ecrit de scripts depuis longtemps, je ne pourrais guère t'aider plus.

Il me semble également qu'il existe une option de ls qui permet de n'afficher que les répertoires, qui pourrait t'être utile pour les visiter (avec cd).

Edit : Dans un terminal, man nom_de_commande pour avoir des infos sur la commande en question
ManusDei est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 18/02/2011, 10h43   #3
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 146
Points : 4 146
Bonjour,

regarde plutôt du côté de find
avec cette commande, tu trouves les fichiers que tu cherches, et tu peux exécuter des commandes :
Code :
find "$rep" -type f -exec ... {} \;
regarde la page de man.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h12   #4
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 105
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 105
Points : 32
Points : 32
Hm merci, la commande find devrait bien m'aider oui
Sylver--- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h31   #5
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 105
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 105
Points : 32
Points : 32
Donc quand j'utilise
find . -name "*.zip"
il me sort une liste de tous les sous rep avec les fichiers zip, good. De type :
./Ab/toto.zip
./Ac/tata.zip
etc

Si j'ai bien compris le fonctionnement de find, à chaque fois qu'il trouve un fichier il effectue l'action demandé. Donc si j'utilise :
find . -name "*.zip" -exec test
il executera la commande test pour chaque fichier trouvé.

Ma nouvelle question serait donc, comment parser le fichier trouvé pour pouvoir utiliser le nom du rep et le nom du fichier en arguments à test ?

Je ne comprend pas cette phrase dans le man de find pour -exec : "La chaîne `{}' est remplacée par le nom du fichier en cours de traitement, et ceci dans toutes ses occurrences, pas seulement aux endroits où elle est isolée, comme c'est le cas avec d'autres versions de find."

Merci
Sylver--- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 11h39   #6
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 105
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 105
Points : 32
Points : 32
A priori le mieux serait que j'utilise un
for myfile in `find blblbalblabla` do
traitement
done
Et dans le traitement je fais un grep, je tests les param et j'appele la commande !

Stay tuned
Sylver--- est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 13h43   #7
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par Sylver--- Voir le message
Ma nouvelle question serait donc, comment parser le fichier trouvé pour pouvoir utiliser le nom du rep et le nom du fichier en arguments à test ?

Merci
Salut,

Peut être un truc du genre te conviendrait-il...


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ tree
.
`-- A
    |-- Aa
    |   |-- tata.zip
    |   `-- toto.zip
    |-- Ab
    |-- Ac
    |   |-- titi.zip
    |   `-- tutu.zip
    |-- Ad
    |   |-- zaza.zip
    |   `-- zozo.zip
    `-- Ae

6 directories, 6 files

$ find . -type f -name "*.zip" -exec sh -c '
NAME=$(basename $1);REP=$(dirname $1)
echo "Rep = ${REP##*/} et Nom = ${NAME}"' _ {} \;

Rep = Ad et Nom = zaza.zip
Rep = Ad et Nom = zozo.zip
Rep = Ac et Nom = titi.zip
Rep = Ac et Nom = tutu.zip
Rep = Aa et Nom = tata.zip
Rep = Aa et Nom = toto.zip
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 13h57   #8
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 105
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 105
Points : 32
Points : 32
Merci, je vais investiguer ça en détail
Sylver--- 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 +2. Il est actuellement 12h33.


 
 
 
 
Partenaires

Hébergement Web