Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

split d'un fichier et action sur les morceaux

7 réponses
Avatar
Kevin Denis
Bonjour,

j'ai quelques gros fichiers, et je souhaitais réduire leur taille en
conservant une signature unique pour les différencier. Une fonction
de hachage est donc la solution.

Pour quelques raisons trop longues à être évoquées ici, j'aurais
besoin de réduire le fichier et de le hacher, mais par morceau, i.e.
prendre le fichier par petit bout, faire un hash de chacun de ces morceaux,
et concaténer tous les hash. (pour donner une idée des ordres de
grandeurs, il s'agit de fichiers supérieurs au giga, et le résultat
devrait être un suite de hash de quelques Mo).

J'utilise donc split, puis sha256sum. Mais ceci à le défaut de
consommer beaucoup d'espace disque: le fichier est d'abord dupliqué
par le split, avant d'être hashé. Il n'existerait pas un moyen
de réunir les deux opérations? Apparement, la page de man de split
ne me propose rien de tel (un genre de -exec {} comme avec
find).

Merci
--
Kevin

7 réponses

Avatar
Marc
Kevin Denis wrote:

j'ai quelques gros fichiers, et je souhaitais réduire leur taille en
conservant une signature unique pour les différencier. Une fonction
de hachage est donc la solution.

Pour quelques raisons trop longues à être évoquées ici, j'aurais
besoin de réduire le fichier et de le hacher, mais par morceau, i.e.
prendre le fichier par petit bout, faire un hash de chacun de ces morceaux,
et concaténer tous les hash. (pour donner une idée des ordres de
grandeurs, il s'agit de fichiers supérieurs au giga, et le résultat
devrait être un suite de hash de quelques Mo).

J'utilise donc split, puis sha256sum. Mais ceci à le défaut de
consommer beaucoup d'espace disque: le fichier est d'abord dupliqué
par le split, avant d'être hashé. Il n'existerait pas un moyen
de réunir les deux opérations? Apparement, la page de man de split
ne me propose rien de tel (un genre de -exec {} comme avec
find).



J'utiliserais dd pour lire une section du fichier, et je piperais le
résultat à sha256sum, avec 3-4 lignes de script autour pour choisir les
bons arguments à dd et boucler. Je ne pense pas qu'il y ait de commande
magique pour résoudre le problème.
Avatar
Nicolas George
Marc , dans le message <iausp9$bm3$, a écrit :
J'utiliserais dd pour lire une section du fichier, et je piperais le
résultat à sha256sum



Attention à dd avec un pipe : si la taille de bloc n'est pas en phase avec
les lectures ou écritures du process à l'autre bout du pipe, dd peut faire
des blocs écourtés, et ne rattrapera pas les octets perdus.
Avatar
Kevin Denis
Le 04-11-2010, Marc a écrit :
J'utiliserais dd pour lire une section du fichier, et je piperais le
résultat à sha256sum, avec 3-4 lignes de script autour pour choisir les
bons arguments à dd et boucler. Je ne pense pas qu'il y ait de commande
magique pour résoudre le problème.



Effectivement. Avec dd, cela devient bien plus simple.
--
Kevin
Avatar
Stephane CHAZELAS
2010-11-04, 17:12(+00), Kevin Denis:
[...]
j'ai quelques gros fichiers, et je souhaitais réduire leur taille en
conservant une signature unique pour les différencier. Une fonction
de hachage est donc la solution.

Pour quelques raisons trop longues à être évoquées ici, j'aurais
besoin de réduire le fichier et de le hacher, mais par morceau, i.e.
prendre le fichier par petit bout, faire un hash de chacun de ces morceaux,
et concaténer tous les hash. (pour donner une idée des ordres de
grandeurs, il s'agit de fichiers supérieurs au giga, et le résultat
devrait être un suite de hash de quelques Mo).

J'utilise donc split, puis sha256sum. Mais ceci à le défaut de
consommer beaucoup d'espace disque: le fichier est d'abord dupliqué
par le split, avant d'être hashé. Il n'existerait pas un moyen
de réunir les deux opérations? Apparement, la page de man de split
ne me propose rien de tel (un genre de -exec {} comme avec
find).


[...]

perl -ne 'BEGIN{$/485760}{open A, "|sha256sum"; print A $_; close A}'

--
Stephane
Avatar
Cyrille Lefevre
Le 05/11/2010 21:09, Stephane CHAZELAS a écrit :
2010-11-04, 17:12(+00), Kevin Denis:

perl -ne 'BEGIN{$/485760}{open A, "|sha256sum"; print A $_; close A}'



Bonjour Stéphane,

t'es pénible dés fois...
tu peux me faire la même avec 5 tâches en // ? :-)

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Avatar
Nicolas George
Stephane CHAZELAS , dans le message
, a écrit :
perl -ne 'BEGIN{$/485760}{open A, "|sha256sum"; print A $_; close A}'



-MDigest::SHA=sha256_hex ... print sha256hex($_), "n"
Avatar
Kevin Denis
Le 05-11-2010, Stephane CHAZELAS a écrit :
[...]

perl -ne 'BEGIN{$/485760}{open A, "|sha256sum"; print A $_; close A}'



Simple et élégant, merci.
--
Kevin