Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/07/2011, 19h19   #1
Membre du Club
 
Inscription : juillet 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 166
Points : 61
Points : 61
Par défaut [bash] utilisation incorrecte de dd, valeur de skip trop grande ?

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)

Code :
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
target -> chemin absolu du fichier à découper
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 :

Code :
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
Vous l'aurez compris, mon erreur se situe au niveau de la ligne 18 du code.

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))
AnozerOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h13.


 
 
 
 
Partenaires

Hébergement Web