A voir également:
- Script shell lister les fichiers d'un répertoire
- Shell | lister le contenu d'un repertoire !! ✓ - Forum - Shell
- BASH+lister les fichiers d'un répertoire ✓ - Forum - Shell
- Script shell (liste de repertoires) ✓ - Forum - Shell
- Commande pour lister les fichiers d'un repertoire - Conseils pratiques - MS-Dos
- Liste des fichiers d'un répertoire - Conseils pratiques - Logiciels
9 réponses
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
Salut
utilise une structure if et un exit dans le cas ou tu souhaite arreter le script
la syntaxe de exit se trouve dans un man exit
Si je ne me trompe pas sa doit être exit(n)
avec n compris entre 1 et se ke tu veu
Pour l'existence d'un fichier, la commande find tubée avec grep doit pouvoir t'aider
utilise une structure if et un exit dans le cas ou tu souhaite arreter le script
la syntaxe de exit se trouve dans un man exit
Si je ne me trompe pas sa doit être exit(n)
avec n compris entre 1 et se ke tu veu
Pour l'existence d'un fichier, la commande find tubée avec grep doit pouvoir t'aider
[Dal]
- Messages postés
- 5476
- Date d'inscription
- mercredi 15 septembre 2004
- Statut
- Contributeur
- Dernière intervention
- 25 février 2021
Salut,
Avec bash, cela devrait faire l'affaire :
Quelques liens :
https://tldp.org/LDP/abs/html/fto.html
https://tldp.org/LDP/abs/html/testconstructs.html
https://tldp.org/LDP/abs/html/
Dal
NB : il n'y a pas d'espace entre les [[, si tu fais un copier coller, retire le (je l'ai mis pour tromper le moteur de publication de CCM qui les considère comme des caractères spéciaux)
Avec bash, cela devrait faire l'affaire :
#!/bin/bash if [ [ -e toto1 ]] then echo "Le fichier toto1 existe" else echo "Le fichier toto1 n'existe pas" exit fi echo "Je continue"
Quelques liens :
https://tldp.org/LDP/abs/html/fto.html
https://tldp.org/LDP/abs/html/testconstructs.html
https://tldp.org/LDP/abs/html/
Dal
NB : il n'y a pas d'espace entre les [[, si tu fais un copier coller, retire le (je l'ai mis pour tromper le moteur de publication de CCM qui les considère comme des caractères spéciaux)
gorkimat
- Messages postés
- 70
- Date d'inscription
- dimanche 1 avril 2007
- Statut
- Membre
- Dernière intervention
- 1 mars 2012
- Messages postés
- 143
- Date d'inscription
- lundi 5 juin 2006
- Statut
- Membre
- Dernière intervention
- 16 juillet 2010
Salut,
Un petit bout de code :
J'espere que cela correspond à ta demande.
Gorki
Un petit bout de code :
if [ -z `ls <repertoire>` ];then echo "Le repertoire est vide" else echo "Le repertoire n'est pas vide" fi
J'espere que cela correspond à ta demande.
Gorki
nouabi
- Messages postés
- 143
- Date d'inscription
- lundi 5 juin 2006
- Statut
- Membre
- Dernière intervention
- 16 juillet 2010
Bon alors ce matin j'en suis la ! et ca ne marche pas .....
Le contenu du else marche , il n'y a pas de proble hje l'ai testé mais le problème est qu'i lme cré des fichier vide : du coup je voudrai qu'il execute mon script uniquement si le dossier /home/ftp/upload/ n'est pas vide !!!!!!
Voici le script (il tourne en boucle grâce a vixie-cron) :
aider moi svp
Le contenu du else marche , il n'y a pas de proble hje l'ai testé mais le problème est qu'i lme cré des fichier vide : du coup je voudrai qu'il execute mon script uniquement si le dossier /home/ftp/upload/ n'est pas vide !!!!!!
Voici le script (il tourne en boucle grâce a vixie-cron) :
#!/bin/sh a=0 test -e "/home/ftp/upload/*" && a=1 || a=0 if a=0 then exit else #Identification de la variable 'date' date=`date +%d%m%y_%H:%M:%S` #Copie du fichier reçu par ftp dans le dossier /var/tmp/ mv /home/ftp/upload/test1 /var/tmp/sms.tmp #Création du fichier text vide 'sms.txt' dans /var/auto/ touch /var/auto/sms #Copie du numéro de telephone dans le nouveau fichier text 'sms.txt'. echo "To: 336xxxxxxxx " > /var/auto/sms #Copie du contenu du fichier sms.tmp à la suite du fichier 'sms.txt' cat /var/tmp/sms.tmp >> /var/auto/sms #Suppression du fichier temporaire rm /var/tmp/sms.tmp cp /var/auto/sms /var/auto/sms_$date #Copie du fichier 'sms.txt' dans /var/spool/sms/ready/ (save) et dans #/var/spool/sms/outgoing/ (envoi définitif) cp /var/auto/sms /var/spool/sms/ready/sms_$date #cp /var/auto/sms /var/spool/sms/outgoing/sms_$date #Suppression du fichier 'sms.txt' rm /var/auto/sms_$date fi
aider moi svp
ekra
- Messages postés
- 1867
- Date d'inscription
- vendredi 15 avril 2005
- Statut
- Membre
- Dernière intervention
- 24 juillet 2014
- Messages postés
- 143
- Date d'inscription
- lundi 5 juin 2006
- Statut
- Membre
- Dernière intervention
- 16 juillet 2010
Je ne comprend pas bien.
Si tu crée des fichiers vides, le repertoire n'est pas vide, ce qui est normal. Ce script est bien lancé en cas de dossier non vide comme tu le désire.
Si tu crée des fichiers vides, le repertoire n'est pas vide, ce qui est normal. Ce script est bien lancé en cas de dossier non vide comme tu le désire.
xavyeii
Bonjour,
J'ai un problème, quasi similaire
Je voudrais que l'utilisateur entre un nom de fichier et que le script vérifie si ce fichier existe a l'intérieur d'une archive et si il existe qu'il soit extrait de l'archive
******************************************************************
Exemple:
Contenue d'une archive "toto.tar.gz":
/repertoire/sousrepertoire/toto
L'utilisateur entre "toto" comme nom de fichier
Ce fichier existe bien dans l'archive alors on l'extrait sinon on dit qu'il n'existe pas.
******************************************************************
Merci par avance,
Xavier
J'ai un problème, quasi similaire
Je voudrais que l'utilisateur entre un nom de fichier et que le script vérifie si ce fichier existe a l'intérieur d'une archive et si il existe qu'il soit extrait de l'archive
******************************************************************
Exemple:
Contenue d'une archive "toto.tar.gz":
/repertoire/sousrepertoire/toto
L'utilisateur entre "toto" comme nom de fichier
Ce fichier existe bien dans l'archive alors on l'extrait sinon on dit qu'il n'existe pas.
******************************************************************
Merci par avance,
Xavier
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
Man tar => cette commande te donnera le manuel de tar. Dedans ya une option (-t si je ne m'abuse, mais je suis vraiment pas sur) qui te permet de lister les fichiers de l'archive.
Par la suite tu peut faire ta lecture au clavier (read me semble-t-il...pareil sa fait lontemps), dans une variable (mettons $ficLu)
Et après tu fait un tar -.....|grep $ficLu et tu test ce résultat: si $?=0 alors il existe et tu l'extrait sinon il existe pas
Ce n'est qu'une idée d'algo, pour les détails techniques, soit un man de tar, grep, read et autres.... soit quelqu'un qui tate du script shell en ce moment.
Par la suite tu peut faire ta lecture au clavier (read me semble-t-il...pareil sa fait lontemps), dans une variable (mettons $ficLu)
Et après tu fait un tar -.....|grep $ficLu et tu test ce résultat: si $?=0 alors il existe et tu l'extrait sinon il existe pas
Ce n'est qu'une idée d'algo, pour les détails techniques, soit un man de tar, grep, read et autres.... soit quelqu'un qui tate du script shell en ce moment.
xavyeii
Déjà merci à toi freto de m'avoir répondu rapidement =)
Je n'ai pas très bien compris ce que tu fais avec le grep
Voilà ce que j'ai déjà fait:
*******************************************************************************************
#liste le contenu de l'archive archive1.tar.gz
tar -tvzf /tmp/lister/archive1.tar.gz
#liste le contenu de l'archive archive2.tar.gz
tar -tvzf /tmp/lister/archive2.tar.gz
#l'utilisateur entre le nom du fichier qu'il veut extraire
echo -ne "\nTaper le nom du fichier pour le restaurer : "
read reponse
*******************************************************************************************
Jusque là tout va bien ! Mais après plus rien ne va..
Il me manque l'algorithme pour dire si l'archive1 contient $reponse, alors on extrait $reponse sinon on dit qu'il n'existe pas (pareil pour archive2)
Même l'extraction sans l'algorithme ne marche pas...
*******************************************************************************************
#Extraction de "repertoire/sousrepertoire/${reponse}" de l'archive "/tmp/lister/archive1.tar.gz" vers la racine
tar -C / -xzf /tmp/lister/archive1.tar.gz repertoire/sousrepertoire/${reponse}
#Extraction de "repertoire/sousrepertoire/${reponse}" de l'archive "/tmp/lister/archive1.tar.gz" vers la racine
tar -C / -xzf /tmp/lister/archive2.tar.gz repertoire/sousrepertoire/${reponse}
*******************************************************************************************
Il me met les erreurs suivantes:
gzip: stdin: decompression OK, trailing garbage ignored
tar: Child returned satus 2
tar: /tmp/lister/archive1.tar.gz: ne peut être retrouvé dans l'archive (Normal vu que c'est l'archive !)
tar: Statut d'erreur reporté d'erreurs précédentes
gzip: stdin: decompression OK, trailing garbage ignored
tar: Child returned satus 2
tar: /tmp/lister/archive2.tar.gz: ne peut être retrouvé dans l'archive (Normal vu que c'est l'archive !)
tar: repertoire/sousrepertoire/nomdufichier: ne peut être retrouvé dans l'archive (Normal aussi vu le nom que j'ai rentré ne se trouve que dans archive1.tar.gz !)
tar: Statut d'erreur reporté d'erreurs précédentes
Voilà tout !
Si vous pouvez m'aider ce serait gentil c'est important !
Merci par avance,
Xavier
Je n'ai pas très bien compris ce que tu fais avec le grep
Voilà ce que j'ai déjà fait:
*******************************************************************************************
#liste le contenu de l'archive archive1.tar.gz
tar -tvzf /tmp/lister/archive1.tar.gz
#liste le contenu de l'archive archive2.tar.gz
tar -tvzf /tmp/lister/archive2.tar.gz
#l'utilisateur entre le nom du fichier qu'il veut extraire
echo -ne "\nTaper le nom du fichier pour le restaurer : "
read reponse
*******************************************************************************************
Jusque là tout va bien ! Mais après plus rien ne va..
Il me manque l'algorithme pour dire si l'archive1 contient $reponse, alors on extrait $reponse sinon on dit qu'il n'existe pas (pareil pour archive2)
Même l'extraction sans l'algorithme ne marche pas...
*******************************************************************************************
#Extraction de "repertoire/sousrepertoire/${reponse}" de l'archive "/tmp/lister/archive1.tar.gz" vers la racine
tar -C / -xzf /tmp/lister/archive1.tar.gz repertoire/sousrepertoire/${reponse}
#Extraction de "repertoire/sousrepertoire/${reponse}" de l'archive "/tmp/lister/archive1.tar.gz" vers la racine
tar -C / -xzf /tmp/lister/archive2.tar.gz repertoire/sousrepertoire/${reponse}
*******************************************************************************************
Il me met les erreurs suivantes:
gzip: stdin: decompression OK, trailing garbage ignored
tar: Child returned satus 2
tar: /tmp/lister/archive1.tar.gz: ne peut être retrouvé dans l'archive (Normal vu que c'est l'archive !)
tar: Statut d'erreur reporté d'erreurs précédentes
gzip: stdin: decompression OK, trailing garbage ignored
tar: Child returned satus 2
tar: /tmp/lister/archive2.tar.gz: ne peut être retrouvé dans l'archive (Normal vu que c'est l'archive !)
tar: repertoire/sousrepertoire/nomdufichier: ne peut être retrouvé dans l'archive (Normal aussi vu le nom que j'ai rentré ne se trouve que dans archive1.tar.gz !)
tar: Statut d'erreur reporté d'erreurs précédentes
Voilà tout !
Si vous pouvez m'aider ce serait gentil c'est important !
Merci par avance,
Xavier
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
Ha ya deux archives?? he beh
Bon la du coup sa donnerais sa
tar -tvzf /tmp/lister/archive1.tar.gz >resultat1.txt
tar -tvzf /tmp/lister/archive2.tar.gz >resultat2.txt
...
read reponse
cat resultat1.txt|grep $reponse 2>error.txt
Cette commande si dessus va t afficher la ligne qui contient $reponse parmis les lignes du fichier resultat1, et sortir les erreurs dans le fichier error.txt
if $?
sa c pour tester si grep a trouvé une ligne
donc ici tu fé l'extraction
else
donc ici tu ne fait pas l'extraction et tu passe au fichier resultat2.txt
cat resultat2.txt|grep $reponse 2>error.txt
if $?
rebelote, tu fé l'extraction
else
aucune des archives ne contient le fichier: tu affiche ce qu'il faut
end if
end if
Bon sorry mais la syntaxe du if j'en ai vu tellement que je ne sais plus comment on fait
Peut etre était ce des {}...mais il me semble que nn.
Man if pour plus d'infos
Bon la du coup sa donnerais sa
tar -tvzf /tmp/lister/archive1.tar.gz >resultat1.txt
tar -tvzf /tmp/lister/archive2.tar.gz >resultat2.txt
...
read reponse
cat resultat1.txt|grep $reponse 2>error.txt
Cette commande si dessus va t afficher la ligne qui contient $reponse parmis les lignes du fichier resultat1, et sortir les erreurs dans le fichier error.txt
if $?
sa c pour tester si grep a trouvé une ligne
donc ici tu fé l'extraction
else
donc ici tu ne fait pas l'extraction et tu passe au fichier resultat2.txt
cat resultat2.txt|grep $reponse 2>error.txt
if $?
rebelote, tu fé l'extraction
else
aucune des archives ne contient le fichier: tu affiche ce qu'il faut
end if
end if
Bon sorry mais la syntaxe du if j'en ai vu tellement que je ne sais plus comment on fait
Peut etre était ce des {}...mais il me semble que nn.
Man if pour plus d'infos
xavyeii
Merci pour ta rapidité...
J'ai bien pris note de tes remarques !
(man if n'existe pas, c'est dans man bash ;) )
Je pense que tu voulais dire si "$? = 0" -> extraire sinon passé au reste
J'ai modifié mon script ce qui donne maintenant cela
**********************************************************************************************
#liste le contenu de l'archive archive1.tar.gz et le met dans resultat1.txt
tar -tvzf /tmp/lister/archive1.tar.gz > resultat1.txt
#liste le contenu de l'archive archive2.tar.gz et le met dans resultat2.txt
tar -tvzf /tmp/lister/archive2.tar.gz > resultat2.txt
#l'utilisateur entre le nom du fichier qu'il veut extraire
echo -ne "\nTaper le nom du fichier pour le restaurer : "
read reponse
cat resultat1.txt|grep $reponse 2> error.txt
if [ $? = 0 ]
then
tar -C / -xzf /tmp/lister/archive1.tar.gz repertoire/sousrepertoire/${reponse}
else
exit
fi
cat resultat2.txt|grep $reponse 2> error.txt
if [ $? = 0 ]
then
tar -C / -xzf /tmp/lister/archive2.tar.gz repertoire/sousrepertoire/${reponse}
else
exit
fi
*******************************************************************************************
Mais il me dit que: "le shell a retourné 1"
(ps: il ne me liste plus les archives ... =O =( )
Merci,
J'ai bien pris note de tes remarques !
(man if n'existe pas, c'est dans man bash ;) )
Je pense que tu voulais dire si "$? = 0" -> extraire sinon passé au reste
J'ai modifié mon script ce qui donne maintenant cela
**********************************************************************************************
#liste le contenu de l'archive archive1.tar.gz et le met dans resultat1.txt
tar -tvzf /tmp/lister/archive1.tar.gz > resultat1.txt
#liste le contenu de l'archive archive2.tar.gz et le met dans resultat2.txt
tar -tvzf /tmp/lister/archive2.tar.gz > resultat2.txt
#l'utilisateur entre le nom du fichier qu'il veut extraire
echo -ne "\nTaper le nom du fichier pour le restaurer : "
read reponse
cat resultat1.txt|grep $reponse 2> error.txt
if [ $? = 0 ]
then
tar -C / -xzf /tmp/lister/archive1.tar.gz repertoire/sousrepertoire/${reponse}
else
exit
fi
cat resultat2.txt|grep $reponse 2> error.txt
if [ $? = 0 ]
then
tar -C / -xzf /tmp/lister/archive2.tar.gz repertoire/sousrepertoire/${reponse}
else
exit
fi
*******************************************************************************************
Mais il me dit que: "le shell a retourné 1"
(ps: il ne me liste plus les archives ... =O =( )
Merci,
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
Oui normal la liste est redirigée dans des fichiers....tu a du voir deux fichiers se créer
Sinon le test d'égalité c pas [$? = 0] mais [$? -eq 0] il me semble
SInon pour l'algo tourne le plutot comme sa
cat resultat1.txt|grep $reponse 2> error.txt
if [ $? = 0 ]
then
tar -C / -xzf /tmp/lister/archive1.tar.gz repertoire/sousrepertoire/${reponse}
else
cat resultat2.txt|grep $reponse 2> error.txt
if [ $? = 0 ]
then
tar -C / -xzf /tmp/lister/archive2.tar.gz repertoire/sousrepertoire/${reponse}
else
exit(40)
fi
fi
Parce que la comme tu l'a fait si il le trouve pas dans la premiere archive il quitte sans tester la deuxieme
Le exit(40) c pour sortir avec un autre code que 1 paece que le code d'erreur 1 est assez courant dans plusieurs commandes: du cou tu pourra tester la variable $? pour savoir si c ton script qui merde ou bien si c'est une commande dedans
Sinon le test d'égalité c pas [$? = 0] mais [$? -eq 0] il me semble
SInon pour l'algo tourne le plutot comme sa
cat resultat1.txt|grep $reponse 2> error.txt
if [ $? = 0 ]
then
tar -C / -xzf /tmp/lister/archive1.tar.gz repertoire/sousrepertoire/${reponse}
else
cat resultat2.txt|grep $reponse 2> error.txt
if [ $? = 0 ]
then
tar -C / -xzf /tmp/lister/archive2.tar.gz repertoire/sousrepertoire/${reponse}
else
exit(40)
fi
fi
Parce que la comme tu l'a fait si il le trouve pas dans la premiere archive il quitte sans tester la deuxieme
Le exit(40) c pour sortir avec un autre code que 1 paece que le code d'erreur 1 est assez courant dans plusieurs commandes: du cou tu pourra tester la variable $? pour savoir si c ton script qui merde ou bien si c'est une commande dedans
xavyeii
Hum .. il me met toujours la même erreur..
Je laisse ceci pour un moment.. Mais j'ai une autre question:
Je voudrais créer un script qui permet d'afficher le nom d'hôte de la machine dans un fichier texte à part:
hostname -d > AC000021.txt
Ca c'est bon.. Mais je voudrais qu'il me l'affiche, dans le fichier toujours, mais après un petit message ( du style: "Le nom d'hote pour cette machine est: "
Saurais-tu comment faire ?
Merci en tout cas pour tes réponses,
Xavier
Je laisse ceci pour un moment.. Mais j'ai une autre question:
Je voudrais créer un script qui permet d'afficher le nom d'hôte de la machine dans un fichier texte à part:
hostname -d > AC000021.txt
Ca c'est bon.. Mais je voudrais qu'il me l'affiche, dans le fichier toujours, mais après un petit message ( du style: "Le nom d'hote pour cette machine est: "
Saurais-tu comment faire ?
Merci en tout cas pour tes réponses,
Xavier
freto
- Messages postés
- 1542
- Date d'inscription
- vendredi 6 juillet 2007
- Statut
- Membre
- Dernière intervention
- 8 avril 2016
tu peut faire
echo "Le nom d'hote pour cette machine est:" | hostname -d |tee AC000021.txt
ou encore
echo "Le nom d'hote pour cette machine est:" $(hostnale -d)>AC000021.txt
ou encore
nom=hostname -d
echo "Le nom d'hote pour cette machine est:" $nom > AC000021.txt
Pour ton erreur, as tu essayé de tester $? de la manière suivante
if $? then
Parce que vu qu'il va effectuer le test en booleen, sa devrait passer
Mais si sa fonctionne pas, bah la va falloir trouver autre chose
echo "Le nom d'hote pour cette machine est:" | hostname -d |tee AC000021.txt
ou encore
echo "Le nom d'hote pour cette machine est:" $(hostnale -d)>AC000021.txt
ou encore
nom=hostname -d
echo "Le nom d'hote pour cette machine est:" $nom > AC000021.txt
Pour ton erreur, as tu essayé de tester $? de la manière suivante
if $? then
Parce que vu qu'il va effectuer le test en booleen, sa devrait passer
Mais si sa fonctionne pas, bah la va falloir trouver autre chose
xavyeii
Merci beaucoup ! je n'étais pas loin..
Je dois en fait créer un fichier texte qui affiche tout les détails d'un serveur (tel que: le nom, la version, la date, les différents patchs installés, les différents logiciels installés, les dernières mises à jour effectuées, etc..)
Donc voilà, je vous remercie ! Je reviendrais vers vous si j'ai des blocages =)
Xavier
Je dois en fait créer un fichier texte qui affiche tout les détails d'un serveur (tel que: le nom, la version, la date, les différents patchs installés, les différents logiciels installés, les dernières mises à jour effectuées, etc..)
Donc voilà, je vous remercie ! Je reviendrais vers vous si j'ai des blocages =)
Xavier