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 23/09/2011, 22h26   #1
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : -4
Points : -4
Par défaut Projet en shell

Bonjour/Bonsoir , voila j'ai un projet a faire pour lundi avec le language shell . Voici le sujet :



Voici ce que j'ai fait :
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
29
30
31
32
33
34
35
36
37
#!/bin/sh
#Projet 19 : Shell Compressor 
mkdir Fichier_Projet /home/
 
echo "affichage de la liste"
ls 
 
echo $#
if test -f
 
then 
    cp * /home/Fichier_Projet/
    echo "c est bon !!! :D"
else
    echo "ben ouai passon a la suite"
fi
 
echo $#
if test -d
 
then
  cp -R * /home/ili819/Fichier_Projet/
    echo "Parfait"
else
    echo "-_-"
fi
 
 
ls *
 
if test -f
 
then cp * /home/Fichier_Projet/
 echo " C'est reussi"
else
echo " C'est mort"
fi

Donc voila ... je sais pas trop quoi faire mais je pense que la ligne
Code :
1
2
3
4
5
6
7
8
9
ls *
 
if test -f
 
then cp * /home/Fichier_Projet/
 echo " C'est reussi"
else
echo " C'est mort"
fi
sert à rien ...

Le problème c'est que je copie ( avec ce script ) les répertoires or je dois avoir QUE les fichiers ... donc j'ai regardé s'il y'avait des commandes pour extraire tous les fichiers de chaque répertoire puis par la suite supprimer ces répertoires mais la j'avou je suis perdu ..


Merci par avance pour votre aide

Je precise que j'ai un peu pres appris ce language aujourd'hui et que par malheur je suis tomber sur le projet en shell..
TNT soldat est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/09/2011, 11h29   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 538
Points : 7 754
Points : 7 754
on est pas la pour faire tes devoirs, on t'aidera mais après lundi
en plus tu as un début de solution, continues à reflechir pour completer ce qui manque, et utiliser les bonnes methodes aux bons moments...

tu vas trouver j'en suis sur...

si ça peut t'aider fais le d'abord avec find et tu changera apres ça devrait te guider.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 12h08   #3
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

Tu peux oublier ls¸cette commande, très pratique dans un terminal, est à proscrire dans un script, car elle génère des complications pour retrouver les noms de fichiers, et est donc source d'erreurs.
Bref, dans un script, c'est du poison.

Il y a déjà eu beaucoup de questions sur la façon de modifier le nom des fichiers, ici-même.
Le principe est identique, toi, tu veux seulement les copier ailleurs...
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/09/2011, 12h19   #4
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 986
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 986
Points : 6 124
Points : 6 124
Bonjour.

Comme dit N_Bah, c'est mieux d'éviter ls ...

Tu peux partir sur cette piste (non testé) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
 
# Si pas d'arguments
if [ $# -lt 1 ]
then
    echo "Saisir le répertoire :"
    read REP
else
    # On prend le premier argument
    REP=$1
fi
 
# On parcours le contenu de ce répertoire (en évitant le ls)
for i in $REP/*
do
    # ... à implémenter
done
Faut pas oublier la compression (avec gzip comme demandé), ni la gestion du répertoire de destination (de la même façon que le répertoire source) et enfin faut pas hésiter à se servir du man.

Je te laisse implémenter la suite .

Ensuite ici, tu trouvera des exercices corrigés ou certains éléments pourront te servir (comme les tests sur les fichiers ou ce genre de chose).

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/09/2011, 12h28   #5
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
Je suis absolument pas un pro du script mais comme ça sans trop réfléchir, je dirais qu'une fonction récursive (je pense à une fonction faisant appel à elle même. Je ne suis pas sûr que le terme soit bien employé...) et une boucle for...done pourrait régler ton problème de recherche récursive.

À toi de voir si ma remarque te sera utile et bon courage pour ton boulot!

edit : grilled pour la boucle for. je n'étais pas sûr que les chemins du type "/cheminvers/*" fonctionnaient en sh. Du coups l'idée de la fonction récursive n'est peut être pas nécessaire. À vérifier!

Si tu as le droit au bash >=4, regarde du coté des options "shopt ...".
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/09/2011, 13h10   #6
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
effectivement, pour descendre dans les sous-répertoires, il faudra une fonction récursive.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/09/2011, 13h15   #7
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 986
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 986
Points : 6 124
Points : 6 124
Citation:
Envoyé par Levi59 Voir le message
edit : grilled pour la boucle for. je n'étais pas sûr que les chemins du type "/cheminvers/*" fonctionnaient en sh. Du coups l'idée de la fonction récursive n'est peut être pas nécessaire. À vérifier!
Si si au contraire. Si on a seulement 1 niveau à descendre pas besoin mais sinon ce sera bien mieux de passer par une fonction récursive

Je ne lui ai donné que les premières pistes.

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/09/2011, 13h23   #8
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : -4
Points : -4
Merci pour vos aides mais je cherche toujours :/

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
29
30
#!/bin/bash
 
# Si pas d'arguments
 
mkdir Fichier_Projet /home/
 
if [ $# -lt 1 ]
then
    echo "Saisir le répertoire :"
    read REP
else
    # On prend le premier argument
    REP=$1
fi
 
 echo $#
if test -d
 
then 
    cp -R /home/ili819/Fichier_Projet/
    echo "c est bon !!! :D"
else
    echo "ben ouai passon a la suite"
fi
 
# On parcours le contenu de ce répertoire 
for i in $REP/*
do
    cp * /home/ili819/Fichier_Projet
done
TNT soldat est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/09/2011, 13h59   #9
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
qu'est censé faire mkdir ?
test nécessite un argument.

tu devrais faire un plan de ce qui doit être fait pour réaliser la tâche assignée, dessiner un arbre de décision...
i.e. ne pas coder directement sans savoir où tu vas aller.
et lire la documentation :
man commande_externe
commande_externe --help
man bash
help commande_interne
lire les documents en lien dans ma signature
trouver un copie de l'Advanced Bash Scripting
...
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/09/2011, 14h09   #10
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : -4
Points : -4
mkdir permet de créer un répertoire..
TNT soldat est déconnecté   Envoyer un message privé Réponse avec citation 03
Vieux 24/09/2011, 14h11   #11
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
je demandais ça dans le cadre de ton script, pas d'une manière générale.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/09/2011, 14h12   #12
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : -4
Points : -4
Bah dés que les fichiers étaients copiés alors il allait vers le repertoire créer
TNT soldat est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/09/2011, 14h14   #13
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
tel que tu l'as écrite, cette commande crée un répertoire Fichier_Projet dans le répertoire courant, et tente de recéer /home/.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/09/2011, 14h18   #14
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : -4
Points : -4
Ah d'accord.

Car en faite je veux parcourir tous les répertoires ( et sous repertoires ) et ils copient tous les fichiers qui les composent vers un nouveau fichier qui faudra compresser dans un même fichier.

Faudrais peut etre utiliser la fonction while pour dire que tant qu'il y'a des sous repertoires alors il continue a parcourir
TNT soldat est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/09/2011, 15h42   #15
 
Homme
Inscription : septembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 6
Points : -4
Points : -4
C'est bon je pense avoir résolu . Merci
TNT soldat est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 25/09/2011, 16h03   #16
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par TNT soldat Voir le message
Car en faite je veux parcourir tous les répertoires ( et sous repertoires ) et ils copient tous les fichiers qui les composent vers un nouveau fichier qui faudra compresser dans un même fichier.
Salut

Je vois que tu as bien compris que sous Unix, tout était fichier. Toutefois pour nous, pauvres humains, ta phrase n'est pas super super claire.

En plus tu dis que tous les fichiers des divers répertoires seront copiés dans un même fichier/dossier. Mais comment va se comporter ton script si tu as un fichier "repA/toto" et un autre "repB/toto" ? Le second "toto" qui sera copié dans ton dossier de destination écrasera le premier...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 25/09/2011, 20h52   #17
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
Juste pour voir comment tu as résolu le problème, je pense qu'il serait intéressant de publier le résultat de ton travail (après lundi pour éviter de mâcher le travail d'un camarade) histoire de voir la solution apportée à cette exercice et peut être te conseiller pour la prochaine fois !

Edit :
gzip ne compresse pas des dossiers, J'en conclus que chaque fichier doit être compressé dans le dossier de destination non ?
Je suis curieux de comprendre...
__________________
Carpe Diem
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h38.


 
 
 
 
Partenaires

Hébergement Web