Bonjour.
Je veux découper des fichiers, mais comme j'ai besoin d'avoir plus de contrôle sur le fichier que ne le permet split, j'utilise dd.
Mais visiblement quelque chose m'échappe dans son utilisation.
Voici une partie de mon code (au besoin je peux le poster au complet)
target -> chemin absolu du fichier à découper
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 dd if="$target" bs=$size count=1 of="$filename.001" echo 'premier fichier done' for x in $(seq 2 $numFiles) do if (( x < 10 )) ; then prefix="00" elif (( x < 100 )) ; then prefix="0" else prefix= fi skipValue=$((( (x-1)*size ))) echo "skip value = $skipValue" dd if="$target" bs=$size count=1 skip=$skipValue of="$filename.${prefix}$x" echo 'done' done
size -> taille en octets qui sert de références pour les tailles de portions à créer (une fois définie ne varie jamais)
numFiles -> nombre de portions à créer (en fonction de la taille du fichier à découper et de size)
Et voici ce que ca peut donner comme résultat avec un fichier de 4.4 Gio nommé monFichier et size = 666 mio :
Vous l'aurez compris, mon erreur se situe au niveau de la ligne 18 du code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 1+0 enregistrements lus 1+0 enregistrements écrits 698351616 octets (698 MB) copiés, 8,90638 s, 78,4 MB/s premier fichier done skip value = 698351616 dd: «/media/Data/JD/monFichier»*: ne peut pas ignorer jusqu'au décalage indiqué 0+0 enregistrements lus 0+0 enregistrements écrits 0 octet (0 B) copié, 0,000295359 s, 0,0 kB/s done skip value = 1396703232 dd: «/media/Data/JD/monFichier»*: ne peut pas ignorer jusqu'au décalage indiqué 0+0 enregistrements lus 0+0 enregistrements écrits 0 octet (0 B) copié, 0,000251568 s, 0,0 kB/s done skip value = 2095054848 dd: «/media/Data/JD/monFichier»*: ne peut pas ignorer jusqu'au décalage indiqué 0+0 enregistrements lus 0+0 enregistrements écrits 0 octet (0 B) copié, 0,000249752 s, 0,0 kB/s done skip value = 2793406464 dd: «/media/Data/JD/monFichier»*: ne peut pas ignorer jusqu'au décalage indiqué 0+0 enregistrements lus 0+0 enregistrements écrits 0 octet (0 B) copié, 0,000256178 s, 0,0 kB/s done skip value = 3491758080 dd: «/media/Data/JD/monFichier»*: ne peut pas ignorer jusqu'au décalage indiqué 0+0 enregistrements lus 0+0 enregistrements écrits 0 octet (0 B) copié, 0,000272591 s, 0,0 kB/s done skip value = 4190109696 dd: «/media/Data/JD/monFichier»*: ne peut pas ignorer jusqu'au décalage indiqué 0+0 enregistrements lus 0+0 enregistrements écrits 0 octet (0 B) copié, 0,000254432 s, 0,0 kB/s done
Peut être que le skip est trop grand et que je dois utiliser un multiple en augmentant en conséquence la valeur de count ?
EDIT : Ok, j'avais mal lu le man, skip s'exprime en bloc et non en byte, il suffit donc de faire cela dans le dd de la boucle for skip=$(( x-1 )).
Et on m'a prévenu que ce n'était pas terrible d'utiliser seq de cette façon, qu'il vallait mieux utiliser la forme for((e1;e2;e3))
Partager