<![CDATA[Forum Ubuntu-fr.org / [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?id=1057831 Mon, 08 Oct 2012 06:53:52 +0000 FluxBB <![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11045011#p11045011 Peut être le bash que j'utilise est buggée... Mon script est destiné à tourner sous RedHat EL 6.2 (ou CentOS 6.2).
Du coup, je garde la méthode via le petit fichier temporaire, dans le lequel je stocke le contenu du hash. Là, "if" ne m'engueule plus ^^

A ce stade, le résultat obtenu me convient parfaitement. Les temps de génération sont divisés par deux c'est parfait.

Merci pour votre aide.

]]>
Mon, 08 Oct 2012 06:53:52 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11045011#p11045011
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11015841#p11015841 Chez moi, les 3 formes que tu as utilisées en #16 fonctionnent dans un script bash.

]]>
Fri, 05 Oct 2012 16:39:46 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11015841#p11015841
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11015771#p11015771
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
]]>
Fri, 05 Oct 2012 16:24:24 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11015771#p11015771
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11015711#p11015711 Quelle est ta version de bash ?

$ bash --version
GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)
]]>
Fri, 05 Oct 2012 16:17:54 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11015711#p11015711
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11015581#p11015581 En passant par un fichier temporaire ça marche :

echo -n "MD5SUM=$md5sum" > /tmp/md5sum
dd if=/tmp/md5sum of=$FINAL_NAME bs=1 seek=$md5byte conv=notrunc
rm -f /tmp/md5sum
]]>
Fri, 05 Oct 2012 16:02:16 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11015581#p11015581
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11015531#p11015531
#!/bin/bash
[...]
md5sum=`sed -e '1,/^'$BIN_SEPARATOR'$/d' "$FINAL_NAME" | md5sum - | awk '{print $1}'`
md5byte=`head -n200 "$FINAL_NAME" | grep -b "^MD5SUM=" | cut -d":" -f1`
dd if=<(echo -n MD5SUM=$md5sum) of=$FINAL_NAME bs=1 seek=$md5byte conv=notrunc
ddcommand="dd if=<(echo -n MD5SUM=$md5sum) of=$FINAL_NAME bs=1 seek=$md5byte conv=notrunc"
eval $ddcommand
dd if=<(echo -n MD5SUM=c7f0b9dfd40da9561253983c0ecc044f) of=webEnv_uninstall_1000.bin bs=1 seek=615 conv=notrunc

Les 3 méthodes pour le dd échouent :

dd: opening `<(echo -n MD5SUM=9d850edb583a8b36c1f9dc3bbcd51c7f)': No such file or directory

Par contre, si je lance la commande (avec ou sans variables) directement dans le terminal, ça fonctionne...

]]>
Fri, 05 Oct 2012 15:56:30 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11015531#p11015531
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11015401#p11015401 Comment as-tu lancé le script ? Il doit être lancé en bash, pas en sh.

]]>
Fri, 05 Oct 2012 15:46:55 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11015401#p11015401
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11015291#p11015291 Bon par contre, la commande dd ne veut pas s’exécuter dans un fichier bash...

]]>
Fri, 05 Oct 2012 15:39:44 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11015291#p11015291
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11014971#p11014971 Super !!! Ça fonctionne à merveille.

Pour localiser la ligne :

head -n50 mon_bash | grep -b "^MD5SUM="
]]>
Fri, 05 Oct 2012 15:15:49 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11014971#p11014971
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11014421#p11014421 olibann #10 a écrit :

On m'a proposé de le faire avec dd, mais je ne trouve pas comment.

Voici un exemple :

$ cat mon_bash
#!/bin/bash

# Début du fichier bash

MD5SUM="00000000000000000000000000000000"

# Suite du fichier bash
dd if=<(echo -n 6d2bf9d6ebe32f56c7ab8bdbb53d1e9f) of=mon_bash bs=1 seek=47 conv=notrunc
$ cat mon_bash
#!/bin/bash

# Début du fichier bash

MD5SUM="6d2bf9d6ebe32f56c7ab8bdbb53d1e9f"

# Suite du fichier bash
]]>
Fri, 05 Oct 2012 14:21:02 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11014421#p11014421
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11014361#p11014361 obibann a écrit :

Oui mais dans ce cas, ma variable n'est plus déclarée en début de script, je ne peut donc plus récupérer sa valeur.

En recuperant la taille totale, tu peux recuperer la somme en fin, au moins en C.
Sinon en laissant exactement la place (MD5SUM="[MD5SUMMD5SUMMD5SUMMD5SUMMD5SUM]") pour l'insérer sans modifier la taille du fichier ?

]]>
Fri, 05 Oct 2012 14:17:42 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11014361#p11014361
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11014021#p11014021 alduc1 a écrit :

Ajouter le md5sum en fin du bash+archive est peut être plus pratique. Tu sais combien d'octets tu écris en fin et donc tu sais les virer pour decompresser. A la création c'est juste un append au fichier bash+tar.gz et donc il faut juste caluler la somme sur le fichier total bash+tar.gz.

Oui mais dans ce cas, ma variable n'est plus déclarée en début de script, je ne peut donc plus récupérer sa valeur.

Pour info, j'ai fait un test de lecture séquentielle en PHP (pour aller vite) et ça marche parfaitement. La modification de ma ligne est instantanée car je ne lit que 20 lignes, modifie 1 ligne ensuite je m'arrête.

Au pire, si je ne trouve pas d'autres solutions, je serais obligé de faire un petit programme C... Mais c'est dommage d'en arriver là tongue

On m'a proposé de le faire avec dd, mais je ne trouve pas comment.

]]>
Fri, 05 Oct 2012 13:52:30 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11014021#p11014021
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11013951#p11013951 Ajouter le md5sum en fin du bash+archive est peut être plus pratique. Tu sais combien d'octets tu écris en fin et donc tu sais les virer pour decompresser. A la création c'est juste un append au fichier bash+tar.gz et donc il faut juste caluler la somme sur le fichier total bash+tar.gz.

]]>
Fri, 05 Oct 2012 13:48:40 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11013951#p11013951
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11013541#p11013541 Ce n'est pas tout à fait ça. Mon fichier final contient une partie bash, puis une partie binaire.
Le hash stocké dans la partie bash correspond au hash de la partie binaire.

La partie bash sert à extraire automatiquement le binaire, puis à déployer son contenu (il s'agit d'un tar.gz).
Il fait également tout un tas d'autres choses tongue.

Actuellement, je créé mon tar.gz, je md5sum, je stock le hash dans le fichier sh, puis je rassemble le tout.
Ce que je souhaiterai, c'est éviter de passer par une archive intermédiaire et de créer mon tar.gz directement à la suite de mon sh (je divise ainsi par 2 les temps de création).

Cependant, en faisant comme ça je suis obligé de stocker mon hash dans le fichier final qui est gros, d'où mon problème de fichier temporaire.

]]>
Fri, 05 Oct 2012 13:18:58 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11013541#p11013541
<![CDATA[Réponse à : [Résolu] Remplacement dans un fichier sans fichier temporaire]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=11013351#p11013351 obibann a écrit :

La chaine à remplacer ne fait pas forcement le même nombre de bits.
Je remplace un marqueur par sa valeur.

MD5SUM="[MD5SUM]"

devient

MD5SUM="6a5bc1cc5f80a48b540bc09d082b5855"

Le but étant de construire mon fichier puis d'y stocker son hash pour des vérifications lors de son utilisation.

Ca veut dire que pour vérifier l'intégrité de ton fichier, tu fais l'opération inverse : lecture du md5sum stocké dans le fichier, le replacer par le pattern initial et calculer la somme md5 sur le fichier ?
L'idéal est de rajouter les octets md5sum en fin de fichier dans ce cas.

]]>
Fri, 05 Oct 2012 13:01:22 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=11013351#p11013351