#1 Le 20/05/2008, à 13:08
- LittleWhite
[RÉSOLU] Faire une compression => En plusieurs parties
Bonjour à tous,
J'arrive pas à trouver le nom du sujet correct donc j'explique mon cas ...
J'ai un dossier, que je veux compresser de préférence en .tar.bz2 ( soit la commande tar -jcf )
Mais la petite difficulté est que je veux que l'archive finale soit en plusieurs fichiers découpé par une taille fixe.
Du genre avec le .rar sous windows des fichiers archive.r00 archive.r01 ...
Soit ma question est : Comment faire une compression en .tar.bz2 qui donne une archive en plusieurs parties.
C'est quelque chose qui n'est pas faisable avec l'interface graphique ( file-roller )
Je veux pas du .rar car j'aime pas ce format.
J'ai regardé tar --help ( ainsi que man tar ) mais il y a trop d'option que je ne comprends pas , et donc que je n'arrive pas à voir laquelle que j'ai besoin.
Normalement j'ai besoin de l'argument -M ( multi volume ) mais comment je lui indique la taille?
Merci pour vos prochaines aides et réponses.
Dernière modification par LittleWhite (Le 24/05/2008, à 21:38)
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#2 Le 20/05/2008, à 20:35
- snapshot
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Salut
tar ne sait pas trop séparer en plusieurs fichiers. En fait, il sait le faire, mais ne sait pas changer le nom du fichier : ça ne marche bien qu'avec un lecteur de bande, pour lequel il a été conçu.
Si tu veux créer plusieurs fichier, il faut utiliser l'utilitaire split
tar cv * | split -a 4 -d -b 100000 - /tmp/backup.tar.gz-
Cette comande produira des fichiers de (-b) 100000 octets, numérotés avec 4 (-a) chiffres décimaux (-d).
Pour détarer, il faut soit utiliser l'option multivolume (-M) de tar et donner tous les "-f fichiers...", soit concaténer avec le shell (admettons que tu as des fichiers de 0001 à 0197) :
cat /tmp/backup.tar.gz-{0000..0197} | tar xj
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#3 Le 20/05/2008, à 20:51
- LittleWhite
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Pour détarer, il faut soit utiliser l'option multivolume (-M) de tar et donner tous les "-f fichiers...", soit concaténer avec le shell (admettons que tu as des fichiers de 0001 à 0197) :
Le split n'est pas trop bête , mais je ne veux pas faire du cat pour refaire le fichier ( mais si je ne trouve rien d'autre , je le ferai )
=> Si tu fais
tar -xfj /tmp/archive.tar.gz*
ne va t'il pas reussir ?
Merci de m'avoir répondu.
Je continue de chercher sur l'option -M ... car j'aimerais vraiment faire comme pour le rar...
Edit :
Excuses pour le modérateur qui à déplacer mon sujet dans la partie Général ... je ne penser pas qu'il fallait le mettre là
Edit2 :
Il semble que cela ne soit vraiment pas possible avec tar . L'option -M ne peut être utilisé.
Merci à Snapshot pour sa réponse efficace.
( Juste faire attention , quand l'on met un j pour la décompression il en faut un à la compression ( pour la commande tar ) )
Dernière modification par LittleWhite (Le 20/05/2008, à 21:31)
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#4 Le 20/05/2008, à 22:30
- snapshot
Re : [RÉSOLU] Faire une compression => En plusieurs parties
J'ai trouvé une autre solution ! Mais c'est un peu lourd et ça ne marche pas pour les archives compressées (bzip2 ou gzip)
Elle est donnée par la documentation de Gnu tar et est fondée sur un script que tar invoque à chaque fois que le fichier doit être coupé. Le script retourne en sortie le nouveau nom du fichier à utiliser, et voilà
J'ai amélioré le script donné dans leur doc :
/usr/local/bin/new_volume
#!/bin/bash
# la ligne suivante remplace un éventuel -zzz final par -xxx
# ou xxx est le numéro d'archive
name=$(printf "%s-%03i" ${TAR_ARCHIVE%-*} $TAR_VOLUME)
case $TAR_SUBCOMMAND in
-c) # create: rien à tester
;;
-d|-x|-t)
# eXtraire, Tester, Difference : vérifier que le ficheir est lisible
if [[ ! -r $name ]]
then
# non ? sortir avec erreur
echo "$name not found"
exit 1
fi
;;
*)
# autre : on ne sait pas faire
exit 1
esac
echo $name >&$TAR_FD
Il faut le rendre exécutable : chmod a+x /usr/local/bin/new_volume
Ensuite, pour créer une archive multi-volume de 30K par fichier de toutes les images .jpg :
tar -c -L30 -f /tmp/picture.tar-001 -F new_volume *.jpg
Pour vérifier la liste :
tar -t -v -f /tmp/picture.tar-001 -F new_volume
Lors de la création des archives, la taille des fichiers produits est arrondie à 10Ko. On peut la changer avec l'option -b (--blocking-factor) par pas de 512 octets.
Dernière modification par snapshot (Le 20/05/2008, à 22:31)
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#5 Le 20/05/2008, à 22:38
- snapshot
Re : [RÉSOLU] Faire une compression => En plusieurs parties
non, tar -xfj /tmp/archive.tar.gz* ne marchera pas, car c'est le shell qui expansera l'étoile *, ce qui fera que tar recevra en argument une liste toute faite :
tar -xfj /tmp/archive.tar.gz-001 /tmp/archive.tar.gz-002 /tmp/archive.tar.gz-003
ce qui sera interprété par tar comme une demande d'extraction des fichiers 002 et 003 situés dans l'archive 001... c'est pas du tout ce qu'on veut !
Pour que ça marche, il faudrait à la limite donner :
tar -xfffj /tmp/archive.tar.gz-001 /tmp/archive.tar.gz-002 /tmp/archive.tar.gz-003
Trois "f" = trois fichiers à lire, situés à la suite de la ligne de commande... Si'il y en a 5827, il faut mettre 5827 fois le "f"...
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#6 Le 20/05/2008, à 23:14
- LittleWhite
Re : [RÉSOLU] Faire une compression => En plusieurs parties
De plus tout à l'heure j'ai failli freezé mon PC avec l'option -b de tar !! ( surement une erreur de ma part , mais j'ai pas compris pourquoi ) ( fuite de mémoire ? O_o ).
Même si ce script marche, est ce que tar peut récupéré les plusieurs paquets de façon à les extraire sans erreurs ? ( sans cat non plus )
J'ai trouvé une autre solution ! Mais c'est un peu lourd et ça ne marche pas pour les archives compressées (bzip2 ou gzip)
Il les compressent pas du coup ? J'aimerais qu'il le fasse ( on gagne quand même de l'espace en compressant ).
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#7 Le 21/05/2008, à 00:01
- French Aka d3my
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Salut !
Je m'insurge et je proteste contre le fait que tu ais fini ce post en rajoutant [SOLUTIONNÉ] au titre, en majuscules en plus.
Solutionner un problème ca n'existe pas. C'est faux et archifaux !!! C'est un néologisme affreux qui reflète une tendance fainéante à éviter les verbes du 2è et 3è groupe pour se limiter aux verbes du premier groupe quitte à en créer.
On trouve ou on apporte une solution à un problème
On trouve une solution (tout court)
On résout un problème
et ainsi un problème est RÉSOLU !!!
Enfin je crois que tu as compris...
Solution est un nom et non un verbe. RÉSOUDRE c'est pas difficile bordel !
#8 Le 21/05/2008, à 09:15
- LittleWhite
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Je suis tout a fait d'accord avec toi, French Aka d3my .
Mais le problème n'est pas résolu.
Nous avons trouvé une solution , que l'on peut dire "satisfaisante" ( car elle permet de faire quelque chose de semblable à ce que je cherche )
Mais en aucun cas mon problème est résolu car ce que je demande semble impossible... ( vu les possibilités de tar )
Mais au sinon , a part le fait que ça te choque que je mette "SOLUTIONNÉ" , tu as une idée à mon problème ?
Et en plus "SOLUTIONNÉ" attire des gens
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#9 Le 21/05/2008, à 18:30
- French Aka d3my
Re : [RÉSOLU] Faire une compression => En plusieurs parties
7Zip ne te permettrait-il pas de RÉSOUDRE ton problème ?
Mais pour l'amour de dieu ou d'ubuntu, enlève-moi cette horreur !!!
#10 Le 21/05/2008, à 18:34
- fourminux
Re : [RÉSOLU] Faire une compression => En plusieurs parties
+1 French Aka d3my
Et en plus "SOLUTIONNÉ" attire des gens
C'est quoi ce Marketing à 2 sous
Tu les attires pour des motifs qui diffèrent de ton objectif initial, car eux viennent pour t'engueuler et non pour t'aider Je t'invite à prendre des cours de Marketing en bonus avec ceux de français
Monté une salle info 100% Linux sans rien y connaitre
Kubuntu 10.10 / XP
Centrino 1,73-1,5Gb- Intel 128Mb shared
Simple comme Ubuntu, Linux n'est pas Windows. Noob? Quid après l'install?
Hors ligne
#11 Le 21/05/2008, à 19:35
- LittleWhite
Re : [RÉSOLU] Faire une compression => En plusieurs parties
C'est bon je l'enlève ... mais , pour répondre à la question de French Aka d3my , je n'utilise ni rar ni 7z pour des raisons plus ou moins personnelles.
Bizarre lorsque on pose une question, personne ne veut vraiment répondre à votre question mais cherche plutôt à contourner votre question ...
J'attend toujours une solution pour la commande tar ( ou autre chose de 100% libre qui permet de faire un format de sortie en .tar.bz2 ou .tar.gz ) et qui permet de découper les archives.
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#12 Le 21/05/2008, à 21:27
- fourminux
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Pas obligatoirement. Tu cherches des avis, qui par essence sont différents, ou des solutions, qui par essence même sont capable de résoudre le problème demandé.
Il est à accepter que les solutions proposées en réponse ne sont pas exactement ce qu'on veut entendre, je crois
Monté une salle info 100% Linux sans rien y connaitre
Kubuntu 10.10 / XP
Centrino 1,73-1,5Gb- Intel 128Mb shared
Simple comme Ubuntu, Linux n'est pas Windows. Noob? Quid après l'install?
Hors ligne
#13 Le 21/05/2008, à 22:53
- LittleWhite
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Il est à accepter que les solutions proposées en réponse ne sont pas exactement ce qu'on veut entendre, je crois
J'accepte entièrement les autres solutions , je les utilise, mais sur ce cas là j'avais déjà trouvé la technique du split | cat mais je veux vraiment le faire avec avec tar ... comme marqué au dessus.
Je pose ma question surtout pour avoir quelque chose que je n'ai pas encore trouvé moi même , j'avais espoir que quelqu'un l'ai fais avant moi ... mais il semble vraiment que ce ne sois pas possible avec tar . ( je reste perplexe )
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#14 Le 21/05/2008, à 23:38
- snapshot
Re : [RÉSOLU] Faire une compression => En plusieurs parties
À l'origine, tar n'était destiné qu'à écrire sur des bandes magnétiques (Tape ARchiver). L'utilisation que l'on en fait aujourd'hui est donc détournée. Il y a donc deux techniques qui permettent d'obtenir à peu près les mêmes effets que rar, la méthode du split, et la méthode du script... Si les fichiers produits ne sont pas compressés, c'est l'affaire de gzip à appeler après. Donc, du point de vue unix, le problème est réglé : on peut le faire.
On est tout à fait dans la philosophie d'Unix qui privilégie l'utilisation conjointe de plusieurs utilitaires spécialisés (un pour l'archive, l'autre pour la diviser, et le dernier pour compresser) plutôt que d'un seul monolithique qui fait tout (et qui est tellement compliqué qu'il faut truffer l'interface d'assistants, mais là, je trolle).
Sinon, rien ne t'empêche d'utiliser rar sous linux si tu tiens vraiment à son comportement... ou à écrire toi même ton propre outil
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#15 Le 22/05/2008, à 00:05
- LittleWhite
Re : [RÉSOLU] Faire une compression => En plusieurs parties
D'accord, donc en fait Unix c'est un peu un lego, il donne les quelques briques de base, et après on construit tout plein de chose.
J'avais peut être oublier la philosophie ...
Je vais peut-être faire un script ( avec zenity ça peut-être bien , je pourrais apprendre en même temps ) pour faire ce que je veux faire. ( Disons une semaine et je le post )
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#16 Le 24/05/2008, à 21:41
- LittleWhite
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Voilà j'ai fais un petit script avec zenity et tout comme il faut. Normalement ça marche assez bien ( tous mes essais sont correct donc ... )
S'il y a un bug n'hésiter pas à m'en faire part , ou quelque chose à améliorer ...
#!/bin/bash
# Script crée par LittleWhite
# Permet de faire une compression avec tar
# De découper le fichiers comprésser avec split
# De recoller les morceaux avec cat
# Samedi 24 May 2008
# mailto: thedograge@hotmail.fr
#
# Necessite zenity
# Je me suis aidée du script de Kriegy : "CPU Frequency"
# Premier script zenity
# Version 1.0 : Samedi 24 May 2008 -> Premier script fonctionnel
OPTION1="Compresser+Découper"
OPTION2="Recoller"
choice=$(zenity --list --radiolist --title="CutCat" --column="Choississez votre action :" --column="Option" FALSE $OPTION1 FALSE $OPTION2)
if [ $choice == $OPTION1 ] ; then # Compression + Decoupage
compress=$(zenity --entry --title="CutCat" --text="Veuillez entrer le chemin de menant à ce que vous voulez compresser")
if [ -e $compress ] ; then # Notre fichier existe
tailleparties=$(zenity --entry --title="CutCat" --text="Veuillez entrer la taille des parties souhaitées en octets")
taille=$(du -xmsb $compress | tr -s "\t" " " | cut -d " " -f 1) # On récupère la taille du fichier ( marche avec les dossiers au Mo près )
if [ $taille -le $tailleparties ] ; then
nbparties=1
else
nbparties=$(($taille/$tailleparties)) # Nombre de morceaux
fi
encodage=$(expr length $nbparties) # Pour connaitre sur combien de caractères on peut mettre le nombre de morceaux
tar -cj $compress | split -a $encodage -d -b $tailleparties - $compress.tar.bz2. # On compresse et on decoupe
else
zenity --error --title="CutCat : Erreur" --text="Le fichier n'existe pas"
fi
elif [ $choice == $OPTION2 ] ; then
file=$(zenity --file-selection)
if [ -z `echo $file | egrep .[0-9]+$` ] ; then
zenity --error --title="CutCat : Erreur" --text="Mauvais fichier"
else
## Partie pour ne garder que le debut du nom du fichier ( enlever les .001 ) ##
NB_CHAMPS=$(echo $file | awk -F"." '{ print NF-1 }')
CHAMPS="1"
for i in `seq 2 $NB_CHAMPS`; do
CHAMPS=$CHAMPS",$i";
done;
filefinal=$(echo $file | cut -d "." -f ${CHAMPS})
cat $filefinal.* > $filefinal # On recolle le fichier
fi
fi
Vous sauvegardez ce code dans un fichier , et vous donner le droit d'exécution :
chmod +x script.sh
Merci à tous ceux qui m'ont aidé
Dernière modification par LittleWhite (Le 24/05/2008, à 21:41)
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#17 Le 28/05/2008, à 14:55
- alchimiste95
Re : [RÉSOLU] Faire une compression => En plusieurs parties
merci pour ce post avant tout
et juste un petit detail a tout ca, on dirait que "split -a 4 -d -b 100000 - /tmp/backup.tar.gz-" ne genere en fait qu'un .tar non compresse.
donc juste a detarer simplement avec tar xvf...
Hors ligne
#18 Le 28/05/2008, à 15:14
- LittleWhite
Re : [RÉSOLU] Faire une compression => En plusieurs parties
En fait, si tu fais :
tar -jvc fichier | split -a 4 -d -b 100000 - /tmp/backup.tar.gz-
La sortie de tar ( qui est souvent un fichier ) va être envoyé directement en entrée de split. Et split va prendre cette entrée et va découper le flux envoyé par tar.
Soit le flux envoyé par tar est compressé ; donc split découpe quelque chose de compresser.
split ne fais que découper , il ne compresse en aucun cas.
donc juste a detarer simplement avec tar xvf...
De plus si tu décompresse avec tar xvf il est content car cette commande prend en entrée tu tar.gz
L'option -z ( pour faire du gz ) semble utile que lors de la compression , car pour extraire avec tar xvf , le "gz" ne le gène pas.
Dernière modification par LittleWhite (Le 28/05/2008, à 15:15)
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#19 Le 28/05/2008, à 16:54
- alchimiste95
Re : [RÉSOLU] Faire une compression => En plusieurs parties
oui j'ai fini par comprendre
c'est d'ailleurs logique
en fait le tar.gz du debut est juste un tar, c'est ca qui m'a un peu induit en erreur.
en plus "propre" c'est:
tar cv * | split -a 4 -d -b 100000 - /tmp/backup.tar-
ou
tar -jvc fichier | split -a 4 -d -b 100000 - /tmp/backup.tar.bzip2-
en tout cas merci ca m'a bien aider ce topic.
finalement l'informatique est reste logique malgres tout et je suis enfin sorti de tout mes problemes du jour
rem: edit pour mettre les balises comme il faut, et j'ai menti c'est pas fini les problemes... multiply-claimed block(s) dans un dique dur vmware...
Dernière modification par alchimiste95 (Le 28/05/2008, à 17:11)
Hors ligne
#20 Le 28/05/2008, à 17:05
- LittleWhite
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Remarque : pour du bzip2 on ecrit plus souvent .bz2 ( mais ça c'est pas grave après tu apelle tes fichiers comme tu veux ( les extensions sous linux sont plus pour l'utilisateur que pour la machine ) )
Remarque 2 : les balises sur ce forum sont avec des crochets '[' au lieur des inferieur superieur '<'
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#21 Le 28/05/2008, à 17:13
- alchimiste95
Re : [RÉSOLU] Faire une compression => En plusieurs parties
oui bz2 c'est vrai
et les crochets c'est corrige la
Hors ligne
#22 Le 28/05/2008, à 18:02
- tux4fun
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Salut LittleWhite,
Ton script est sympa, donc, en conséquence je le "repompe" est j'obtiens systématiquement:
$./tar_split.sh /home/tux4fun/pc_fixe.html
(zenity:5384): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Concernant les locales, j'ai installé localpurge, et de mémoire ai conservé uniquement FR_fr UTF8, et ISO8859-15, y-a-t-il une relation de cause à effet? ou est ce sans rapport?
Dernière modification par tux4fun (Le 28/05/2008, à 18:04)
tux4fun
Hors ligne
#23 Le 28/05/2008, à 21:08
- LittleWhite
Re : [RÉSOLU] Faire une compression => En plusieurs parties
C'est une très bonne question que tu me pose.
Cela semble venir de zenity et pas de mon script ( c'est facile de dire cela )
Pour l'instant je n'ai pas trop d'idée , mais on dirais que zenity est mal installer. ( ou alors gtk ).
Tu peux essayer ça : dpkg-reconfigure locales
Mais je ne suis sur de rien.
Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297
Hors ligne
#24 Le 28/05/2008, à 21:36
- snapshot
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Oui tu as raison, ça vient des locales (les traductions des messages).
La locale qui est paramétrée n'existe pas dans le système : zenity (en fait : la bibliothèque C) t'annonce qu'il ne va pas essayer te traduire. Ce n'est pas une erreur, juste un warning, et ni le script de LittleWhite ni zenity n'y sont pour quelque chose !
Je pense que ton "localpurge" a été un brin trop efficace :-D
Que te donne le résultat des commandes suivantes ?
echo $LANG
et
locale -a
Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !
Hors ligne
#25 Le 29/05/2008, à 16:41
- tux4fun
Re : [RÉSOLU] Faire une compression => En plusieurs parties
Bonjour Snapshot,
Pour localpurge tu as probablement raison.
Comme demandé le retour des commandes:
echo $LANG
fr_FR@euro
$locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX
fr_FR.utf8
LittlleWhite, ton script fonctionne puisque plusieurs utilisateurs en atteste, ce que je remets en cause c'est soit une installation de localpurge trop bourin, ou un autre problème non identifier (relatif à mon install).
tux4fun
Hors ligne