Script shell répartition de fichiers en tar

Fermé
mikadoo - 17 mai 2008 à 22:22
 mikadoo - 18 mai 2008 à 12:03
Bonjour,

Comment répartir des fichiers d'un répertoire en N fichiers .tar ?
Les fichiers doivent être répartis équitablement en taille.

J'ai commencé à écrire mais ça donne des fichiers tar compressés trop différents en taille.

#$1 correspond à N fichiers tar que je veux générer
a=0
for i in `ls -l tmp/* | sort +4 -n`
do
a=`expr $a + 1`
echo $i >> file`expr $a % $1`
done
tar cvf -`cat $file `| gzip > /tmp/$file.tar.gz

Si quelqu'un a une idée ...

Thanks!
A voir également:

1 réponse

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
17 mai 2008 à 23:00
Salut,

as-tu essayé avec split et cat?
lami20j@debian:~/trash$ du -sh prog_linux/*
52K     prog_linux/02
44K     prog_linux/03
48K     prog_linux/04
64K     prog_linux/05
28K     prog_linux/06
40K     prog_linux/07
28K     prog_linux/08
64K     prog_linux/09
104K    prog_linux/10
40K     prog_linux/11
36K     prog_linux/12
60K     prog_linux/13
28K     prog_linux/14
60K     prog_linux/15
28K     prog_linux/16
32K     prog_linux/17
44K     prog_linux/18
56K     prog_linux/19
60K     prog_linux/20
28K     prog_linux/21
288K    prog_linux/22
32K     prog_linux/23
24K     prog_linux/24
40K     prog_linux/25
52K     prog_linux/26
52K     prog_linux/27
48K     prog_linux/28
32K     prog_linux/29
36K     prog_linux/30
52K     prog_linux/31
52K     prog_linux/32
56K     prog_linux/33
4,0K    prog_linux/Makefile
lami20j@debian:~/trash$ tar czf prog_linux_test.tgz prog_linux
lami20j@debian:~/trash$ du -sh prog_linux_test.tgz
156K    prog_linux_test.tgz
lami20j@debian:~/trash$ split -b 50k prog_linux_test.tgz prog_linux_test_
lami20j@debian:~/trash$ rm prog_linux_test.tgz
rm: détruire fichier régulier `prog_linux_test.tgz'? y
lami20j@debian:~/trash$ cat prog_linux_test_aa prog_linux_test_ab prog_linux_test_ac > prog_linux_test.tgz
lami20j@debian:~/trash$ du -sh prog_linux_test.tgz
156K    prog_linux_test.tgz

0
saulut,

Merci lami20j pour ta reponse, mais en fait, l'idée c'est de lancer le tar gz  sur plusieurs process en parallèle.
Il faut donc que je tri et classe les fichiers avant. 
Si par exemple, dans /tmp on a 
200                           Toto_1.txt 
190   		Toto_2.txt 
180   		Toto_3.txt 
100   		Toto_4.txt
80    		Toto_5.txt
50   		Toto_6.txt 
30    		Toto_7.txt
10    		Toto_8.txt
5    		Toto_9.txt

Si on défini N=3 on génére donc 3 fichiers file1, file2, file3 
-comme les fichiers sont déjà tri par taille décroissante dans /tmp - il faudra que
file1 récupere Toto_1.txt 
file2 récupere Toto_2.txt 
file3 récupere Toto_3.txt  ensuite

file2 récupere Toto_4.txt 
file3 récupere Toto_5.txt  
file1 récupere Toto_6.txt ensuite

file3 récupere Toto_7.txt 
file1 récupere Toto_8.txt 
file2 récupere Toto_9.txt  ect...

Le problème, c'est que je ne vois pas comment faire la rotation des fichier $file dans la boucle for ? :-|
0