Script shell répartition de fichiers en tar
mikadoo
-
mikadoo -
mikadoo -
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!
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!
Configuration: Windows XP Internet Explorer 6.0
1 réponse
-
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
-
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 ? :-|
-