split d'un fichier et action sur les morceaux

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Marc
Le #22759621
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.
Nicolas George
Le #22759681
Marc , dans le message
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.
Kevin Denis
Le #22761181
Le 04-11-2010, Marc
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
Stephane CHAZELAS
Le #22763331
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
Cyrille Lefevre
Le #22764011
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.
Nicolas George
Le #22764491
Stephane CHAZELAS , dans le message
perl -ne 'BEGIN{$/485760}{open A, "|sha256sum"; print A $_; close A}'



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

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



Simple et élégant, merci.
--
Kevin
Publicité
Poster une réponse
Anonyme