Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

snapshot a écrit :

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à neutral

Edit2 :
Il semble que cela ne soit vraiment pas possible avec tar sad. 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 smile ( 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à smile

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"... big_smile


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 )

Snapshot a écrit :

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. yikes
Solutionner un problème ca n'existe pas. mad 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 tongue.
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 big_smile ?
Et en plus "SOLUTIONNÉ" attire des gens tongue


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 ? roll
Mais pour l'amour de dieu ou d'ubuntu, enlève-moi cette horreur !!! mad

#10 Le 21/05/2008, à 18:34

fourminux

Re : [RÉSOLU] Faire une compression => En plusieurs parties

+1 French Aka d3my lol

Et en plus "SOLUTIONNÉ" attire des gens tongue

C'est quoi ce Marketing à 2 sous roll
Tu les attires pour des motifs qui diffèrent de ton objectif initial, car eux viennent pour t'engueuler et non pour t'aider hmm Je t'invite à prendre des cours de Marketing wink en bonus avec ceux de français lol


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 tongue ... 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 ... roll
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 wink


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 tongue


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 ... smile

#!/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é smile

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.

alchimiste95 a écrit :

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 smile

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... sad

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 smile

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 big_smile )
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 ! smile

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