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/11/2010, 03h11   #1
Invité régulier
 
Inscription : mars 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 19
Points : 7
Points : 7
Par défaut Besoin d'aide, création d'un script de compression/décompression

Salut à tous.
J'ai envi de me créer un script de compression/décompression grâce au bash et zenity.
Pour l'instant je me suis limité au format 7-Zip étant donné que j'arrive pas à avancer, c'est pourquoi je vous demande votre aide.

En gros pour l'instant ça donne ça :

Au lancement.


Ce qu'on veut compresser.


Répertoire de destination.


Nom de l'archive.


Le script :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
 
tetsuAction=`zenity --list --title="Que voulez-vous faire ?" --column="Action" "Compression" "Decompression"`
 
if [ "$tetsuAction" = "Compression" ]; then
 
    tetsuSrc=`zenity --file-selection --multiple --separator=" "`
    tetsuDest=`zenity --file-selection --directory`
    tetsuFname=`zenity --entry --text="Entrez un nom pour l'archive"`
 
    7z a -mx=9 -m0=lzma2 ${tetsuDest}/${tetsuFname} ${tetsuSrc}
    #roxterm -e 7z a -mx=9 -m0=lzma2 ${tetsuDest}/${tetsuFname} ${tetsuSrc}
 
elif [ "$tetsuAction" = "Decompression" ]; then
    zenity --info --text="Decomp"
else
    exit
fi
Maintenant mon problème :

Ça fonctionne seulement si je sélectionne 1 seul fichier et il ne doit y avoir d'espace ni sur le nom, ni dans les répertoires.
Je pense que c'est une histoire de guillemet mais tout ce que j'ai pu tester jusqu'ici ne marche pas.

Pour info voici à quoi ressemble la ligne de commande pour compresser avec 7-Zip :

1 fichier :
Code :
7z a -mx=9 -m0=lzma2 "/home/user/destination.7z" "/home/user/fichier_a_compresser.ext"
Plusieurs fichiers :
Code :
7z a -mx=9 -m0=lzma2 "/home/user/destination.7z" "/home/user/fichier_a_compresser1.ext" "/home/user/fichier_a_compresser2.ext" "/home/user/fichier_a_compresser3.ext"
Merci par avance.
Tetsumaki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 11h39   #2
Membre habitué
 
Avatar de nowahn
 
Homme
Inscription : août 2008
Messages : 77
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations forums :
Inscription : août 2008
Messages : 77
Points : 131
Points : 131
Bonjour,

Pour éviter le problème des espaces, tu peux changer de délimiteur :
Code bash :
tetsuSrc=`zenity --file-selection --multiple --separator=":"`

Pour mettre les différentes sources sur la ligne de commande de compression, tu peux faire comme ça :

Code bash :
7z a -mx=9 -m0=lzma2 ${tetsuDest}/${tetsuFname} `IFS=: ; echo ${tetsuSrc}`
Bien sûr, il faut le même délimiteur dans les deux commandes, et les noms de fichier et chemins ne doivent pas contenir ce caractère (':' est un bon candidat pour ça).
nowahn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 13h15   #3
Invité régulier
 
Inscription : mars 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 19
Points : 7
Points : 7
En fait voici ce que me retourne le shell quand je fais une simulation avec 2 fichiers sélectionné :

Code :
7z a -mx=9 -m0=lzma2 /home/tetsumaki/Desktop/fichier compresse.7z /home/tetsumaki/fichier test 1 /home/tetsumaki/fichier test 2
J'aimerais que ça me sorte ça :
Code :
7z a -mx=9 -m0=lzma2 "/home/tetsumaki/Desktop/fichier compresse.7z" "/home/tetsumaki/fichier test 1" "/home/tetsumaki/fichier test 2"
Tetsumaki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 16h38   #4
Invité régulier
 
Inscription : mars 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 19
Points : 7
Points : 7
J'ai réussi de cette façon :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh
 
tetsuAction=`zenity --list --title="Que voulez-vous faire ?" --column="Action" "Compression" "Decompression"`
 
if [ "$tetsuAction" = "Compression" ]; then
 
	OLDIFS=$IFS IFS=$'\n'
	tetsuSrc=(`zenity --file-selection --multiple --separator=$'\n'`)
	IFS=$OLDIFS
	tetsuDest=`zenity --file-selection --directory`
	tetsuFname=`zenity --entry --text="Entrez un nom pour l'archive"`
 
	roxterm -e 7z a -mx=9 -m0=lzma2 "${tetsuDest}/${tetsuFname}" "${tetsuSrc[@]}"
 
elif [ "$tetsuAction" = "Decompression" ]; then
    zenity --info --text="Decomp"
else
    exit
fi
Maintenant il faut peaufiner le tout.
Merci.
Tetsumaki 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 07h31.


 
 
 
 
Partenaires

Hébergement Web