Bonjour Zakhar, je suis également intéressé par ton script. J'aimerais arriver à le faire tourner sur mon Nas Syno DS-107 avec le DSM 3.1-1613. Par contre, gros, énorme point noir, je ne connais rien en Linux...

Peux-tu m'aider?

D'avance merci!!!

Greg
Zakhar a écrit
stadros83 a écritJe préfère éviter de remettre le firmware, on ne sait jamais, ça me ferait chier de perdre des données 😃 !

Je vais voir si je ne peux pas effectivement trouver un busybox plus récent 🙂.
Ok, ça se comprend ! 😉

Sinon la même version que celle d'origine, elle n'a guère qu'un peu plus d'un an d'âge... busybox est en développement intense !



En attendant voila une version de développement pour toi :

Le script spécial : celui-là spécial pour Busybox.
Et le script "standard" : celui-là qui est standard pour tout le monde.

- Les numéros de versions sont inchangés.
- Contournement du "stat -c"
- Arrondi au 1024 pour df, et donc retrait de l'option -B1 qui demande l'espace disponible à l'octet près (par défaut on l'a par 1024)

Alors j'ai essayé rapidos avec le script busyxtrem :
NAS> bash busyXtremMerge 2.pdf.001.xtm
Vérifications ...  Erreur
Premier ou dernier fichier de taille incohérente.
Astuce : il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.
Vous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.
Toujours cette histoire de premier ou dernier fichier :L.
Ah ben ça c'est fâcheux !

D'autant plus qu'il n'y a plus aucune erreur de commande affichée... ça signifie :
- soit que tes fichiers xtm sur lesquels tu fais les tests sont réellement mauvais !
- soit qu'une des commandes renvoie un résultat faux mais sans pour autant provoquer une erreur... et là c'est la tuile. :mad:

Afin de déterminer laquelle des deux options est la bonne (certainement la deuxième) peux-tu le relancer avec le bash en mode debug, et le script en mode verbeux c'est à dire :
bash -x busyXtremMerge 2.pdf.001.xtm -v
Et me faire un copier/coller de tout ce que ça va te raconter.

Pour info, et pourquoi ça bloque là, c'est que le script vérifie, avant de faire quoi que ce soit, que tout semble cohérent.

Pour cela, il faut le 1er fichier qui contient un bloc de données indiquant combien de fichiers on a, la taille totale du fichier d'origine, etc...
Ensuite, s'il y a des md5, ceux-ci sont dans le dernier fichier, et le dernier fichier est donc aussi nécessaire.
Même s'il n'y a pas de md5, le script calcule la cohérence de la taille en faisant :
Taille indiquée (entête) du fichier = (Taille du 1er fichier -104 [taille de l'entête]) x ( N [nb de fichiers indiqués dans l'entête] -1 ) + Taille dernier fichier corrigée [c'est à dire en cas de md5, on enlève 32 x N octets ]

Le calcul doit être juste, ainsi on sait qu'on pourra produire un résultat correct.
Or ce calcul, comme la formule l'indique, a besoin des tailles du 1ers et derniers fichiers.
5 jours plus tard
Voici la réponse :
NAS> bash -x busyXtremMerge 2.pdf.001.xtm -v
+ readonly 'MSG_BUSY_VERSION=busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0'
+ MSG_BUSY_VERSION='busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0'
++ dirname busyXtremMerge
+ THIS_SCRIPT_DIR=.
+ . ./tuXtremMerge
++ readonly 'MSG_ERROR=\E[1;31mErreur\E[0m\n'
++ MSG_ERROR='\E[1;31mErreur\E[0m\n'
++ readonly 'MSG_OK=\E[1;32mOK\E[0m'
++ MSG_OK='\E[1;32mOK\E[0m'
++ readonly 'MSG_ATTENTION=\E[1;33mAttention !\E[0m'
++ MSG_ATTENTION='\E[1;33mAttention !\E[0m'
++ readonly 'MSG_BAD_OPTION=Option - incorrecte'
++ MSG_BAD_OPTION='Option - incorrecte'
++ readonly 'MSG_TOO_MANY_PARAMS=Trop de paramètre :'
++ MSG_TOO_MANY_PARAMS='Trop de paramètre :'
++ readonly 'MSG_UNKNOWN_OPTION=Option inconnue :'
++ MSG_UNKNOWN_OPTION='Option inconnue :'
++ readonly 'MSG_UNSPECIFIED_SOURCE_FILE=Fichier source non spécifié'
++ MSG_UNSPECIFIED_SOURCE_FILE='Fichier source non spécifié'
++ readonly 'MSG_VERSION=tuXtremMerge (turbo XTM), version 1.5.5'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.5.5'
++ readonly 'MSG_OPTION_M_AND_N=Vous ne pouvez spécifier les options \E[1;32m-m\E[0m et \E[1;32m-n\E[0m simultanément.'
++ MSG_OPTION_M_AND_N='Vous ne pouvez spécifier les options \E[1;32m-m\E[0m et \E[1;32m-n\E[0m simultanément.'
++ readonly 'MSG_IGNORING_OPTION_F=L'\''option \E[1;32m-f\E[0m sera ignorée puisque l'\''option -\E[1;32m-m\E[0m est spécifiée.'
++ MSG_IGNORING_OPTION_F='L'\''option \E[1;32m-f\E[0m sera ignorée puisque l'\''option -\E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_IGNORING_DEST=Le nom du fichier résultat sera ignoré puisque l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ MSG_IGNORING_DEST='Le nom du fichier résultat sera ignoré puisque l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_CHECKING=Vérifications ...  '
++ MSG_CHECKING='Vérifications ...  '
++ readonly 'MSG_CHECKING_FIRST_SOURCE_FILE=Vérification d'\''existence du premier fichier source...'
++ MSG_CHECKING_FIRST_SOURCE_FILE='Vérification d'\''existence du premier fichier source...'
++ readonly 'MSG_TIP=\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
++ MSG_TIP='\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
++ readonly 'MSG_SUCCESS===================================================\n\E[1;32mToutes les opérations sont terminées avec succès !\E[0m'
++ MSG_SUCCESS='==================================================\n\E[1;32mToutes les opérations sont terminées avec succès !\E[0m'
++ readonly 'MSG_FIRST_FILE_ERROR=001.xtm non trouvé, vide ou erreur'
++ MSG_FIRST_FILE_ERROR='001.xtm non trouvé, vide ou erreur'
++ readonly 'MSG_FIRST_FILE_FOUND=Premier fichier source trouvé :'
++ MSG_FIRST_FILE_FOUND='Premier fichier source trouvé :'
++ readonly 'MSG_OPTION_M_AND_NO_MD5=\E[1;33mRien à faire !\E[0m\nL'\''option \E[1;32m-m\E[0m est spécifiée, or il n'\''y a pas MD5 à vérifier dans ces fichiers xtm.'
++ MSG_OPTION_M_AND_NO_MD5='\E[1;33mRien à faire !\E[0m\nL'\''option \E[1;32m-m\E[0m est spécifiée, or il n'\''y a pas MD5 à vérifier dans ces fichiers xtm.'
++ readonly 'MSG_CHECKING_LAST_SOURCE_FILE=Vérification d'\''existence du dernier fichier source...'
++ MSG_CHECKING_LAST_SOURCE_FILE='Vérification d'\''existence du dernier fichier source...'
++ readonly 'MSG_LAST_FILE_ERROR=Fichier %s%3.3u.xtm non trouvé ou vide\n'
++ MSG_LAST_FILE_ERROR='Fichier %s%3.3u.xtm non trouvé ou vide\n'
++ readonly 'MSG_LAST_FILE_FOUND=Dernier fichier source trouvé: %s%3.3u.xtm\n'
++ MSG_LAST_FILE_FOUND='Dernier fichier source trouvé: %s%3.3u.xtm\n'
++ readonly 'MSG_FILE_SIZES_OK=Tailles premier et dernier fichier cohérentes.'
++ MSG_FILE_SIZES_OK='Tailles premier et dernier fichier cohérentes.'
++ readonly 'MSG_FILE_SIZES_ERROR=Premier ou dernier fichier de taille incohérente.'
++ MSG_FILE_SIZES_ERROR='Premier ou dernier fichier de taille incohérente.'
++ readonly 'MSG_NO_FILE_WRITTEN=Aucun fichier résultat ne sera écrit car l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ MSG_NO_FILE_WRITTEN='Aucun fichier résultat ne sera écrit car l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_COMPUTING_DEST=Détermination de l'\''emplacement du résultat...'
++ MSG_COMPUTING_DEST='Détermination de l'\''emplacement du résultat...'
++ readonly 'MSG_DISPLAY_DEST=Emplacement du résultat :'
++ MSG_DISPLAY_DEST='Emplacement du résultat :'
++ readonly 'MSG_CHECK_DEST_WRITABLE=Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ MSG_CHECK_DEST_WRITABLE='Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ readonly 'MSG_WARN_FORCED_OVERWRITE=\nEcrasement forcé par l'\''option \E[1;32m-f\E[0m, le fichier résultat existe déjà.'
++ MSG_WARN_FORCED_OVERWRITE='\nEcrasement forcé par l'\''option \E[1;32m-f\E[0m, le fichier résultat existe déjà.'
++ readonly 'MSG_WARN_OVERWRITE=\nLe fichier : %s existe déjà.\n'
++ MSG_WARN_OVERWRITE='\nLe fichier : %s existe déjà.\n'
++ readonly 'MSG_FILE_SIZE_MATCHES=La taille du fichier correspond au résultat prévu dans le xtm.'
++ MSG_FILE_SIZE_MATCHES='La taille du fichier correspond au résultat prévu dans le xtm.'
++ readonly 'MSG_FILE_SIZE_DOES_NOT_MATCH=La taille du fichier ne correspond pas au résultat prévu dans le xtm.'
++ MSG_FILE_SIZE_DOES_NOT_MATCH='La taille du fichier ne correspond pas au résultat prévu dans le xtm.'
++ readonly 'MSG_OVERWRITE_HINT=Si vous désirez ré-écrire ce fichier effacez/renommez-le au préalable ou spécifiez l'\''option \E[1;32m-f\E[0m pour forcer l'\''écrasement'
++ MSG_OVERWRITE_HINT='Si vous désirez ré-écrire ce fichier effacez/renommez-le au préalable ou spécifiez l'\''option \E[1;32m-f\E[0m pour forcer l'\''écrasement'
++ readonly 'MSG_WRITE_ERROR=Ecriture de : %s impossible.\nVeuillez vérifier que vous avez l'\''autorisation d'\''écrire ce fichier et que son nom est correct.\n'
++ MSG_WRITE_ERROR='Ecriture de : %s impossible.\nVeuillez vérifier que vous avez l'\''autorisation d'\''écrire ce fichier et que son nom est correct.\n'
++ readonly 'MSG_INSUFFICIENT_SPACE=Espace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n'
++ MSG_INSUFFICIENT_SPACE='Espace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n'
++ readonly 'MSG_CHUNKS_AVAIL=fichiers déjà traités.'
++ MSG_CHUNKS_AVAIL='fichiers déjà traités.'
++ readonly 'MSG_INFO_DELETED_OLD_FILE=Fichier partiel incohérent supprimé par option \E[1;32m-f\E[0m'
++ MSG_INFO_DELETED_OLD_FILE='Fichier partiel incohérent supprimé par option \E[1;32m-f\E[0m'
++ readonly 'MSG_INCOHERENT_PARTIAL_FILE=La taille du fichier partiel n'\''est pas un multiple de la taille de découpage des fichiers xtm.\nSupprimez ce fichier (%s.part) ou utilisez l'\''option \E[1;32m-f\E[0m\n'
++ MSG_INCOHERENT_PARTIAL_FILE='La taille du fichier partiel n'\''est pas un multiple de la taille de découpage des fichiers xtm.\nSupprimez ce fichier (%s.part) ou utilisez l'\''option \E[1;32m-f\E[0m\n'
++ readonly 'MSG_ALL_CHECKED_OK=Vérifications pour le fichier résultat terminées.'
++ MSG_ALL_CHECKED_OK='Vérifications pour le fichier résultat terminées.'
++ readonly 'MSG_PROCESSING_START=\E[1mTraitement optimisé des %u fichiers\E[0m\n'
++ MSG_PROCESSING_START='\E[1mTraitement optimisé des %u fichiers\E[0m\n'
++ readonly 'MSG_PROCESSING_RESTART=\E[1mReprise du traitement à partir du fichier %u\E[0m\nReste à traiter %u fichier(s)\n'
++ MSG_PROCESSING_RESTART='\E[1mReprise du traitement à partir du fichier %u\E[0m\nReste à traiter %u fichier(s)\n'
++ readonly MSG_SEPARATOR===================================
++ MSG_SEPARATOR===================================
++ readonly 'MSG_PROCESSING_FILE=Traitement de %s%3.3u.xtm ...  '
++ MSG_PROCESSING_FILE='Traitement de %s%3.3u.xtm ...  '
++ readonly 'MSG_FILE_MISSING=*** Le fichier est manquant ou de taille incorrecte.'
++ MSG_FILE_MISSING='*** Le fichier est manquant ou de taille incorrecte.'
++ readonly 'MSG_FILE_MISSING_TIP=*** Relancez le programme lorsque le fichier sera complet.'
++ MSG_FILE_MISSING_TIP='*** Relancez le programme lorsque le fichier sera complet.'
++ readonly E_BAD_OPTION=65
++ E_BAD_OPTION=65
++ readonly E_UNKNOWN_OPTION=66
++ E_UNKNOWN_OPTION=66
++ readonly E_TOO_MANY_PARAMS=67
++ E_TOO_MANY_PARAMS=67
++ readonly E_UNSPECIFIED_SOURCE_FILE=68
++ E_UNSPECIFIED_SOURCE_FILE=68
++ readonly E_MSG_OPTION_M_AND_N=69
++ E_MSG_OPTION_M_AND_N=69
++ readonly E_FIRST_FILE_ERROR=80
++ E_FIRST_FILE_ERROR=80
++ readonly E_LAST_FILE_ERROR=81
++ E_LAST_FILE_ERROR=81
++ readonly E_FILE_SIZES_ERROR=82
++ E_FILE_SIZES_ERROR=82
++ readonly E_WRITE_ERROR=83
++ E_WRITE_ERROR=83
++ readonly E_INSUFFICIENT_SPACE=83
++ E_INSUFFICIENT_SPACE=83
++ readonly E_INCOHERENT_PARTIAL_FILE=84
++ E_INCOHERENT_PARTIAL_FILE=84
++ readonly E_WARN_OVERWRITE=96
++ E_WARN_OVERWRITE=96
++ readonly E_CRITICAL_ERROR=127
++ E_CRITICAL_ERROR=127
++ declare -i i size SOURCE_FILE_NB DEST_FILE_NAME_LENGTH SPACE_AVAIL DISK_SPACE_NEEDED DEST_FILE_SIZE CHUNK_SIZE CHUNKS_AVAIL fMD5 LAST_SOURCE_FILE_SIZE
++ OPTION_m=
++ OPTION_n=
++ OPTION_f=
++ OPTION_v=
++ declare -i OPTION_t=0
++ DISPLAY_SOURCE_FILE_NAME=
++ DISPLAY_DEST_FILE_NAME=
++ CHUNKS_AVAIL=0
++ scan_parameters 2.pdf.001.xtm -v
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=2.pdf.001.xtm
++ for param in '"$@"'
++ case "$param" in
++ '[' -v == - ']'
++ i=1
++ '[' 1 -lt 2 ']'
++ case ${param:$i:1} in
++ OPTION_v=1
++ i=2
++ '[' 2 -lt 2 ']'
++ '[' -z 2.pdf.001.xtm ']'
+++ readlink -f 2.pdf.001.xtm
+++ '[' -h 2.pdf.001.xtm ']'
+++ target=2.pdf.001.xtm
+++++ dirname 2.pdf.001.xtm
++++ cd .
++++ pwd
+++ temp=/volume1/DATA/Incoming/Torrent/1
+++ '[' /volume1/DATA/Incoming/Torrent/1 '!=' / ']'
+++ temp=/volume1/DATA/Incoming/Torrent/1/
+++ echo -n /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ timing 1
++ '[' 0 -ge 1 ']'
++ '[' '!' 1 ']'
++ check_parameters
++ '[' ']'
++ v_echo 'Vérification d'\''existence du premier fichier source...'
++ '[' 1 ']'
++ echo -e '*** Vérification d'\''existence du premier fichier source...'
*** Vérification d'existence du premier fichier source...
+++ echo /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ RADIX=/volume1/DATA/Incoming/Torrent/1/2.pdf.
+++ echo 2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ DISPLAY_RADIX=2.pdf.
++ FIRST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ']'
++ v_echo 'Premier fichier source trouvé : 2.pdf.001.xtm'
++ '[' 1 ']'
++ echo -e '*** Premier fichier source trouvé : 2.pdf.001.xtm'
*** Premier fichier source trouvé : 2.pdf.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ fMD5='   1'
++ '[' 1 -eq 0 ']'
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ ls -l /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ cut '-d ' -f 5
++ CHUNK_SIZE=-103
+++ od -An -vtu4 -j92 -N4 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NB='         15'
+++ od -An -vtu8 -j96 -N8 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEST_FILE_SIZE='             13289755'
++ v_echo 'Vérification d'\''existence du dernier fichier source...'
++ '[' 1 ']'
++ echo -e '*** Vérification d'\''existence du dernier fichier source...'
*** Vérification d'existence du dernier fichier source...
+++ printf /volume1/DATA/Incoming/Torrent/1/2.pdf.%3.3u.xtm 15
++ LAST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
+++ printf 'Dernier fichier source trouvé: %s%3.3u.xtm\n' 2.pdf. 15
++ v_echo 'Dernier fichier source trouvé: 2.pdf.015.xtm'
++ '[' 1 ']'
++ echo -e '*** Dernier fichier source trouvé: 2.pdf.015.xtm'
*** Dernier fichier source trouvé: 2.pdf.015.xtm
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ ls -l /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ cut '-d ' -f 5
++ LAST_SOURCE_FILE_SIZE=-479
++ '[' -1921 -eq 13289755 ']'
++ echo -e '\E[1;31mErreur\E[0m\nPremier ou dernier fichier de taille incohérente.'
Erreur
Premier ou dernier fichier de taille incohérente.
++ tip 82
++ echo -e '\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
Astuce : il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.
Vous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.
++ exit 82
Et j'ai fait le test avec des XTM autres, et qui fonctionnent en collage avec XTREMSPLIT, et ça ne fonctionne pas non plus avec les basch 🙁 ...
Ok, je vois, c'est ma fonction en remplacement du "stat -c%s" qui ne retourne pas le bon résultat.

En effet, il trouve que la taille des fichiers intermédiaires et de -103 et que la taille du dernier fichier est de -409
C'est visiblement faux car une taille de fichier négative....

Donc peux-tu faire :
ls -l 2.pdf.001.xtm
(l'option c'est un "L" minuscule) Et me coller le résultat.

Et on va donc essayer les alternatives suivantes :
ls -l 2.pdf.001.xtm | cut -d " " -f 5
ls -l 2.pdf.001.xtm | tr -s [:blank:] | cut -d " " -f 5
wc -c 2.pdf.001.xtm
wc -c 2.pdf.001.xtm | cut -d " " -f 1
Passer les commandes et me faire un collage du résultat de chaque avec la commande.

Ou toutes d'un coup (c'est peut-être plus simple pour ne faire qu'un copier/coller)
ls -l 2.pdf.001.xtm | cut -d " " -f 5
ls -l 2.pdf.001.xtm | tr -s [:blank:] | cut -d " " -f 5
wc -c 2.pdf.001.xtm
wc -c 2.pdf.001.xtm | cut -d " " -f 1
Voici ce que j'obtiens

NAS> ls -l 2.pdf.001.xtm | cut -d " " -f 5
1
NAS> ls -l 2.pdf.001.xtm | tr -s [:blank:] | cut -d " " -f 5
886088
NAS> wc -c 2.pdf.001.xtm
 886088 2.pdf.001.xtm
NAS> wc -c 2.pdf.001.xtm | cut -d " " -f 1

NAS>
Parfait, donc la deuxième "formule" donne (probablement) la taille du fichier, je vais utiliser ça.

Tu peux recharger le script spécial : celui-là spécial pour Busybox.

... et réessayer, si possible avec l'option "-v" pour voir plus en détail ce qu'il se passe.

Si ça "plante" encore, tu peux me le faire directement en "debug", et me donner le résultat, comme d'hab :
bash -x busyXtremMerge 2.pdf.001.xtm -v
Greg360 a écritBonjour Zakhar, je suis également intéressé par ton script. J'aimerais arriver à le faire tourner sur mon Nas Syno DS-107 avec le DSM 3.1-1613. Par contre, gros, énorme point noir, je ne connais rien en Linux...

Peux-tu m'aider?

D'avance merci!!!

Greg
Bien sûr Greg.
Il te faut :
- des fichiers .xtm sur ton NAS
- récupérer les deux scripts de développement cités plus haut
- lancer la commande de collage sur ton NAS

Pour récupérer les deux scripts tu peux les télécharger direct sur ton NAS avec ces deux liens :
Le script spécial : celui-là spécial pour Busybox.
Et le script "standard" : celui-là qui est standard pour tout le monde.

Ensuite, il faut les rendre exécutables de la sorte :
chmod +x busyXtremMerge
chmod +x tuXtremMerge
Puis pour tester le recollage :
./busyXtremMerge Nom_De_Ton_Fichier_001.xtm -v
L'option "-v" permet d'avoir un peu plus de détail de ce qu'il se passe.
Si ça ne marche pas, tu me fais un copier/coller des messages que tu obtiens, si possible en mode debug comme indiqué plus haut.
Voici le résultat de la commande :
NAS> bash -x busyXtremMerge 2.pdf.001.xtm -v
+ readonly 'MSG_BUSY_VERSION=busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0'
+ MSG_BUSY_VERSION='busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0'
++ dirname busyXtremMerge
+ THIS_SCRIPT_DIR=.
+ . ./tuXtremMerge
++ readonly 'MSG_ERROR=\E[1;31mErreur\E[0m\n'
++ MSG_ERROR='\E[1;31mErreur\E[0m\n'
++ readonly 'MSG_OK=\E[1;32mOK\E[0m'
++ MSG_OK='\E[1;32mOK\E[0m'
++ readonly 'MSG_ATTENTION=\E[1;33mAttention !\E[0m'
++ MSG_ATTENTION='\E[1;33mAttention !\E[0m'
++ readonly 'MSG_BAD_OPTION=Option - incorrecte'
++ MSG_BAD_OPTION='Option - incorrecte'
++ readonly 'MSG_TOO_MANY_PARAMS=Trop de paramètre :'
++ MSG_TOO_MANY_PARAMS='Trop de paramètre :'
++ readonly 'MSG_UNKNOWN_OPTION=Option inconnue :'
++ MSG_UNKNOWN_OPTION='Option inconnue :'
++ readonly 'MSG_UNSPECIFIED_SOURCE_FILE=Fichier source non spécifié'
++ MSG_UNSPECIFIED_SOURCE_FILE='Fichier source non spécifié'
++ readonly 'MSG_VERSION=tuXtremMerge (turbo XTM), version 1.5.5'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.5.5'
++ readonly 'MSG_OPTION_M_AND_N=Vous ne pouvez spécifier les options \E[1;32m-m\E[0m et \E[1;32m-n\E[0m simultanément.'
++ MSG_OPTION_M_AND_N='Vous ne pouvez spécifier les options \E[1;32m-m\E[0m et \E[1;32m-n\E[0m simultanément.'
++ readonly 'MSG_IGNORING_OPTION_F=L'\''option \E[1;32m-f\E[0m sera ignorée puisque l'\''option -\E[1;32m-m\E[0m est spécifiée.'
++ MSG_IGNORING_OPTION_F='L'\''option \E[1;32m-f\E[0m sera ignorée puisque l'\''option -\E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_IGNORING_DEST=Le nom du fichier résultat sera ignoré puisque l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ MSG_IGNORING_DEST='Le nom du fichier résultat sera ignoré puisque l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_CHECKING=Vérifications ...  '
++ MSG_CHECKING='Vérifications ...  '
++ readonly 'MSG_CHECKING_FIRST_SOURCE_FILE=Vérification d'\''existence du premier fichier source...'
++ MSG_CHECKING_FIRST_SOURCE_FILE='Vérification d'\''existence du premier fichier source...'
++ readonly 'MSG_TIP=\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
++ MSG_TIP='\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
++ readonly 'MSG_SUCCESS===================================================\n\E[1;32mToutes les opérations sont terminées avec succès !\E[0m'
++ MSG_SUCCESS='==================================================\n\E[1;32mToutes les opérations sont terminées avec succès !\E[0m'
++ readonly 'MSG_FIRST_FILE_ERROR=001.xtm non trouvé, vide ou erreur'
++ MSG_FIRST_FILE_ERROR='001.xtm non trouvé, vide ou erreur'
++ readonly 'MSG_FIRST_FILE_FOUND=Premier fichier source trouvé :'
++ MSG_FIRST_FILE_FOUND='Premier fichier source trouvé :'
++ readonly 'MSG_OPTION_M_AND_NO_MD5=\E[1;33mRien à faire !\E[0m\nL'\''option \E[1;32m-m\E[0m est spécifiée, or il n'\''y a pas MD5 à vérifier dans ces fichiers xtm.'
++ MSG_OPTION_M_AND_NO_MD5='\E[1;33mRien à faire !\E[0m\nL'\''option \E[1;32m-m\E[0m est spécifiée, or il n'\''y a pas MD5 à vérifier dans ces fichiers xtm.'
++ readonly 'MSG_CHECKING_LAST_SOURCE_FILE=Vérification d'\''existence du dernier fichier source...'
++ MSG_CHECKING_LAST_SOURCE_FILE='Vérification d'\''existence du dernier fichier source...'
++ readonly 'MSG_LAST_FILE_ERROR=Fichier %s%3.3u.xtm non trouvé ou vide\n'
++ MSG_LAST_FILE_ERROR='Fichier %s%3.3u.xtm non trouvé ou vide\n'
++ readonly 'MSG_LAST_FILE_FOUND=Dernier fichier source trouvé: %s%3.3u.xtm\n'
++ MSG_LAST_FILE_FOUND='Dernier fichier source trouvé: %s%3.3u.xtm\n'
++ readonly 'MSG_FILE_SIZES_OK=Tailles premier et dernier fichier cohérentes.'
++ MSG_FILE_SIZES_OK='Tailles premier et dernier fichier cohérentes.'
++ readonly 'MSG_FILE_SIZES_ERROR=Premier ou dernier fichier de taille incohérente.'
++ MSG_FILE_SIZES_ERROR='Premier ou dernier fichier de taille incohérente.'
++ readonly 'MSG_NO_FILE_WRITTEN=Aucun fichier résultat ne sera écrit car l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ MSG_NO_FILE_WRITTEN='Aucun fichier résultat ne sera écrit car l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_COMPUTING_DEST=Détermination de l'\''emplacement du résultat...'
++ MSG_COMPUTING_DEST='Détermination de l'\''emplacement du résultat...'
++ readonly 'MSG_DISPLAY_DEST=Emplacement du résultat :'
++ MSG_DISPLAY_DEST='Emplacement du résultat :'
++ readonly 'MSG_CHECK_DEST_WRITABLE=Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ MSG_CHECK_DEST_WRITABLE='Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ readonly 'MSG_WARN_FORCED_OVERWRITE=\nEcrasement forcé par l'\''option \E[1;32m-f\E[0m, le fichier résultat existe déjà.'
++ MSG_WARN_FORCED_OVERWRITE='\nEcrasement forcé par l'\''option \E[1;32m-f\E[0m, le fichier résultat existe déjà.'
++ readonly 'MSG_WARN_OVERWRITE=\nLe fichier : %s existe déjà.\n'
++ MSG_WARN_OVERWRITE='\nLe fichier : %s existe déjà.\n'
++ readonly 'MSG_FILE_SIZE_MATCHES=La taille du fichier correspond au résultat prévu dans le xtm.'
++ MSG_FILE_SIZE_MATCHES='La taille du fichier correspond au résultat prévu dans le xtm.'
++ readonly 'MSG_FILE_SIZE_DOES_NOT_MATCH=La taille du fichier ne correspond pas au résultat prévu dans le xtm.'
++ MSG_FILE_SIZE_DOES_NOT_MATCH='La taille du fichier ne correspond pas au résultat prévu dans le xtm.'
++ readonly 'MSG_OVERWRITE_HINT=Si vous désirez ré-écrire ce fichier effacez/renommez-le au préalable ou spécifiez l'\''option \E[1;32m-f\E[0m pour forcer l'\''écrasement'
++ MSG_OVERWRITE_HINT='Si vous désirez ré-écrire ce fichier effacez/renommez-le au préalable ou spécifiez l'\''option \E[1;32m-f\E[0m pour forcer l'\''écrasement'
++ readonly 'MSG_WRITE_ERROR=Ecriture de : %s impossible.\nVeuillez vérifier que vous avez l'\''autorisation d'\''écrire ce fichier et que son nom est correct.\n'
++ MSG_WRITE_ERROR='Ecriture de : %s impossible.\nVeuillez vérifier que vous avez l'\''autorisation d'\''écrire ce fichier et que son nom est correct.\n'
++ readonly 'MSG_INSUFFICIENT_SPACE=Espace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n'
++ MSG_INSUFFICIENT_SPACE='Espace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n'
++ readonly 'MSG_CHUNKS_AVAIL=fichiers déjà traités.'
++ MSG_CHUNKS_AVAIL='fichiers déjà traités.'
++ readonly 'MSG_INFO_DELETED_OLD_FILE=Fichier partiel incohérent supprimé par option \E[1;32m-f\E[0m'
++ MSG_INFO_DELETED_OLD_FILE='Fichier partiel incohérent supprimé par option \E[1;32m-f\E[0m'
++ readonly 'MSG_INCOHERENT_PARTIAL_FILE=La taille du fichier partiel n'\''est pas un multiple de la taille de découpage des fichiers xtm.\nSupprimez ce fichier (%s.part) ou utilisez l'\''option \E[1;32m-f\E[0m\n'
++ MSG_INCOHERENT_PARTIAL_FILE='La taille du fichier partiel n'\''est pas un multiple de la taille de découpage des fichiers xtm.\nSupprimez ce fichier (%s.part) ou utilisez l'\''option \E[1;32m-f\E[0m\n'
++ readonly 'MSG_ALL_CHECKED_OK=Vérifications pour le fichier résultat terminées.'
++ MSG_ALL_CHECKED_OK='Vérifications pour le fichier résultat terminées.'
++ readonly 'MSG_PROCESSING_START=\E[1mTraitement optimisé des %u fichiers\E[0m\n'
++ MSG_PROCESSING_START='\E[1mTraitement optimisé des %u fichiers\E[0m\n'
++ readonly 'MSG_PROCESSING_RESTART=\E[1mReprise du traitement à partir du fichier %u\E[0m\nReste à traiter %u fichier(s)\n'
++ MSG_PROCESSING_RESTART='\E[1mReprise du traitement à partir du fichier %u\E[0m\nReste à traiter %u fichier(s)\n'
++ readonly MSG_SEPARATOR===================================
++ MSG_SEPARATOR===================================
++ readonly 'MSG_PROCESSING_FILE=Traitement de %s%3.3u.xtm ...  '
++ MSG_PROCESSING_FILE='Traitement de %s%3.3u.xtm ...  '
++ readonly 'MSG_FILE_MISSING=*** Le fichier est manquant ou de taille incorrecte.'
++ MSG_FILE_MISSING='*** Le fichier est manquant ou de taille incorrecte.'
++ readonly 'MSG_FILE_MISSING_TIP=*** Relancez le programme lorsque le fichier sera complet.'
++ MSG_FILE_MISSING_TIP='*** Relancez le programme lorsque le fichier sera complet.'
++ readonly E_BAD_OPTION=65
++ E_BAD_OPTION=65
++ readonly E_UNKNOWN_OPTION=66
++ E_UNKNOWN_OPTION=66
++ readonly E_TOO_MANY_PARAMS=67
++ E_TOO_MANY_PARAMS=67
++ readonly E_UNSPECIFIED_SOURCE_FILE=68
++ E_UNSPECIFIED_SOURCE_FILE=68
++ readonly E_MSG_OPTION_M_AND_N=69
++ E_MSG_OPTION_M_AND_N=69
++ readonly E_FIRST_FILE_ERROR=80
++ E_FIRST_FILE_ERROR=80
++ readonly E_LAST_FILE_ERROR=81
++ E_LAST_FILE_ERROR=81
++ readonly E_FILE_SIZES_ERROR=82
++ E_FILE_SIZES_ERROR=82
++ readonly E_WRITE_ERROR=83
++ E_WRITE_ERROR=83
++ readonly E_INSUFFICIENT_SPACE=83
++ E_INSUFFICIENT_SPACE=83
++ readonly E_INCOHERENT_PARTIAL_FILE=84
++ E_INCOHERENT_PARTIAL_FILE=84
++ readonly E_WARN_OVERWRITE=96
++ E_WARN_OVERWRITE=96
++ readonly E_CRITICAL_ERROR=127
++ E_CRITICAL_ERROR=127
++ declare -i i size SOURCE_FILE_NB DEST_FILE_NAME_LENGTH SPACE_AVAIL DISK_SPACE_NEEDED DEST_FILE_SIZE CHUNK_SIZE CHUNKS_AVAIL fMD5 LAST_SOURCE_FILE_SIZE
++ OPTION_m=
++ OPTION_n=
++ OPTION_f=
++ OPTION_v=
++ declare -i OPTION_t=0
++ DISPLAY_SOURCE_FILE_NAME=
++ DISPLAY_DEST_FILE_NAME=
++ CHUNKS_AVAIL=0
++ scan_parameters 2.pdf.001.xtm -v
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=2.pdf.001.xtm
++ for param in '"$@"'
++ case "$param" in
++ '[' -v == - ']'
++ i=1
++ '[' 1 -lt 2 ']'
++ case ${param:$i:1} in
++ OPTION_v=1
++ i=2
++ '[' 2 -lt 2 ']'
++ '[' -z 2.pdf.001.xtm ']'
+++ readlink -f 2.pdf.001.xtm
+++ '[' -h 2.pdf.001.xtm ']'
+++ target=2.pdf.001.xtm
+++++ dirname 2.pdf.001.xtm
++++ cd .
++++ pwd
+++ temp=/volume1/DATA/Incoming/Torrent/1
+++ '[' /volume1/DATA/Incoming/Torrent/1 '!=' / ']'
+++ temp=/volume1/DATA/Incoming/Torrent/1/
+++ echo -n /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ timing 1
++ '[' 0 -ge 1 ']'
++ '[' '!' 1 ']'
++ check_parameters
++ '[' ']'
++ v_echo 'Vérification d'\''existence du premier fichier source...'
++ '[' 1 ']'
++ echo -e '*** Vérification d'\''existence du premier fichier source...'
*** Vérification d'existence du premier fichier source...
+++ echo /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ RADIX=/volume1/DATA/Incoming/Torrent/1/2.pdf.
+++ echo 2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ DISPLAY_RADIX=2.pdf.
++ FIRST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ']'
++ v_echo 'Premier fichier source trouvé : 2.pdf.001.xtm'
++ '[' 1 ']'
++ echo -e '*** Premier fichier source trouvé : 2.pdf.001.xtm'
*** Premier fichier source trouvé : 2.pdf.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ fMD5='   1'
++ '[' 1 -eq 0 ']'
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ ls -l /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ cut '-d ' -f 5
++ CHUNK_SIZE=-103
+++ od -An -vtu4 -j92 -N4 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NB='         15'
+++ od -An -vtu8 -j96 -N8 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEST_FILE_SIZE='             13289755'
++ v_echo 'Vérification d'\''existence du dernier fichier source...'
++ '[' 1 ']'
++ echo -e '*** Vérification d'\''existence du dernier fichier source...'
*** Vérification d'existence du dernier fichier source...
+++ printf /volume1/DATA/Incoming/Torrent/1/2.pdf.%3.3u.xtm 15
++ LAST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
+++ printf 'Dernier fichier source trouvé: %s%3.3u.xtm\n' 2.pdf. 15
++ v_echo 'Dernier fichier source trouvé: 2.pdf.015.xtm'
++ '[' 1 ']'
++ echo -e '*** Dernier fichier source trouvé: 2.pdf.015.xtm'
*** Dernier fichier source trouvé: 2.pdf.015.xtm
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ ls -l /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ cut '-d ' -f 5
++ LAST_SOURCE_FILE_SIZE=-479
++ '[' -1921 -eq 13289755 ']'
++ echo -e '\E[1;31mErreur\E[0m\nPremier ou dernier fichier de taille incohérente.'
Erreur
Premier ou dernier fichier de taille incohérente.
++ tip 82
++ echo -e '\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
Astuce : il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.
Vous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.
++ exit 82
NAS>
Encore une fois, merci pour le temps que tu passes dessus !
stadros83 a écritVoici le résultat de la commande :

Encore une fois, merci pour le temps que tu passes dessus !
Bah, juste un quart d'heure par-ci par-là maintenant que le plus gros est fait !

Et excuse-moi, j'avais pas mis en ligne le bon fichier, c'était toujours le même fichier... donc test pour rien, c'est le même résultat que précédemment, ce qui est normal puisque le script avait pas été modifié !.. :rolleyes:

Peux-tu reprendre le fichier dans le dernier lien, le script spécial ici : celui-là spécial pour Busybox. et refaire le test.
Voici le résultat :
NAS> bash -x busyXtremMerge 2.pdf.001.xtm -v
+ readonly 'MSG_BUSY_VERSION=busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0'
+ MSG_BUSY_VERSION='busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0'
++ dirname busyXtremMerge
+ THIS_SCRIPT_DIR=.
+ . ./tuXtremMerge
++ readonly 'MSG_ERROR=\E[1;31mErreur\E[0m\n'
++ MSG_ERROR='\E[1;31mErreur\E[0m\n'
++ readonly 'MSG_OK=\E[1;32mOK\E[0m'
++ MSG_OK='\E[1;32mOK\E[0m'
++ readonly 'MSG_ATTENTION=\E[1;33mAttention !\E[0m'
++ MSG_ATTENTION='\E[1;33mAttention !\E[0m'
++ readonly 'MSG_BAD_OPTION=Option - incorrecte'
++ MSG_BAD_OPTION='Option - incorrecte'
++ readonly 'MSG_TOO_MANY_PARAMS=Trop de paramètre :'
++ MSG_TOO_MANY_PARAMS='Trop de paramètre :'
++ readonly 'MSG_UNKNOWN_OPTION=Option inconnue :'
++ MSG_UNKNOWN_OPTION='Option inconnue :'
++ readonly 'MSG_UNSPECIFIED_SOURCE_FILE=Fichier source non spécifié'
++ MSG_UNSPECIFIED_SOURCE_FILE='Fichier source non spécifié'
++ readonly 'MSG_VERSION=tuXtremMerge (turbo XTM), version 1.5.5'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.5.5'
++ readonly 'MSG_OPTION_M_AND_N=Vous ne pouvez spécifier les options \E[1;32m-m\E[0m et \E[1;32m-n\E[0m simultanément.'
++ MSG_OPTION_M_AND_N='Vous ne pouvez spécifier les options \E[1;32m-m\E[0m et \E[1;32m-n\E[0m simultanément.'
++ readonly 'MSG_IGNORING_OPTION_F=L'\''option \E[1;32m-f\E[0m sera ignorée puisque l'\''option -\E[1;32m-m\E[0m est spécifiée.'
++ MSG_IGNORING_OPTION_F='L'\''option \E[1;32m-f\E[0m sera ignorée puisque l'\''option -\E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_IGNORING_DEST=Le nom du fichier résultat sera ignoré puisque l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ MSG_IGNORING_DEST='Le nom du fichier résultat sera ignoré puisque l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_CHECKING=Vérifications ...  '
++ MSG_CHECKING='Vérifications ...  '
++ readonly 'MSG_CHECKING_FIRST_SOURCE_FILE=Vérification d'\''existence du premier fichier source...'
++ MSG_CHECKING_FIRST_SOURCE_FILE='Vérification d'\''existence du premier fichier source...'
++ readonly 'MSG_TIP=\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
++ MSG_TIP='\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
++ readonly 'MSG_SUCCESS===================================================\n\E[1;32mToutes les opérations sont terminées avec succès !\E[0m'
++ MSG_SUCCESS='==================================================\n\E[1;32mToutes les opérations sont terminées avec succès !\E[0m'
++ readonly 'MSG_FIRST_FILE_ERROR=001.xtm non trouvé, vide ou erreur'
++ MSG_FIRST_FILE_ERROR='001.xtm non trouvé, vide ou erreur'
++ readonly 'MSG_FIRST_FILE_FOUND=Premier fichier source trouvé :'
++ MSG_FIRST_FILE_FOUND='Premier fichier source trouvé :'
++ readonly 'MSG_OPTION_M_AND_NO_MD5=\E[1;33mRien à faire !\E[0m\nL'\''option \E[1;32m-m\E[0m est spécifiée, or il n'\''y a pas MD5 à vérifier dans ces fichiers xtm.'
++ MSG_OPTION_M_AND_NO_MD5='\E[1;33mRien à faire !\E[0m\nL'\''option \E[1;32m-m\E[0m est spécifiée, or il n'\''y a pas MD5 à vérifier dans ces fichiers xtm.'
++ readonly 'MSG_CHECKING_LAST_SOURCE_FILE=Vérification d'\''existence du dernier fichier source...'
++ MSG_CHECKING_LAST_SOURCE_FILE='Vérification d'\''existence du dernier fichier source...'
++ readonly 'MSG_LAST_FILE_ERROR=Fichier %s%3.3u.xtm non trouvé ou vide\n'
++ MSG_LAST_FILE_ERROR='Fichier %s%3.3u.xtm non trouvé ou vide\n'
++ readonly 'MSG_LAST_FILE_FOUND=Dernier fichier source trouvé: %s%3.3u.xtm\n'
++ MSG_LAST_FILE_FOUND='Dernier fichier source trouvé: %s%3.3u.xtm\n'
++ readonly 'MSG_FILE_SIZES_OK=Tailles premier et dernier fichier cohérentes.'
++ MSG_FILE_SIZES_OK='Tailles premier et dernier fichier cohérentes.'
++ readonly 'MSG_FILE_SIZES_ERROR=Premier ou dernier fichier de taille incohérente.'
++ MSG_FILE_SIZES_ERROR='Premier ou dernier fichier de taille incohérente.'
++ readonly 'MSG_NO_FILE_WRITTEN=Aucun fichier résultat ne sera écrit car l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ MSG_NO_FILE_WRITTEN='Aucun fichier résultat ne sera écrit car l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_COMPUTING_DEST=Détermination de l'\''emplacement du résultat...'
++ MSG_COMPUTING_DEST='Détermination de l'\''emplacement du résultat...'
++ readonly 'MSG_DISPLAY_DEST=Emplacement du résultat :'
++ MSG_DISPLAY_DEST='Emplacement du résultat :'
++ readonly 'MSG_CHECK_DEST_WRITABLE=Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ MSG_CHECK_DEST_WRITABLE='Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ readonly 'MSG_WARN_FORCED_OVERWRITE=\nEcrasement forcé par l'\''option \E[1;32m-f\E[0m, le fichier résultat existe déjà.'
++ MSG_WARN_FORCED_OVERWRITE='\nEcrasement forcé par l'\''option \E[1;32m-f\E[0m, le fichier résultat existe déjà.'
++ readonly 'MSG_WARN_OVERWRITE=\nLe fichier : %s existe déjà.\n'
++ MSG_WARN_OVERWRITE='\nLe fichier : %s existe déjà.\n'
++ readonly 'MSG_FILE_SIZE_MATCHES=La taille du fichier correspond au résultat prévu dans le xtm.'
++ MSG_FILE_SIZE_MATCHES='La taille du fichier correspond au résultat prévu dans le xtm.'
++ readonly 'MSG_FILE_SIZE_DOES_NOT_MATCH=La taille du fichier ne correspond pas au résultat prévu dans le xtm.'
++ MSG_FILE_SIZE_DOES_NOT_MATCH='La taille du fichier ne correspond pas au résultat prévu dans le xtm.'
++ readonly 'MSG_OVERWRITE_HINT=Si vous désirez ré-écrire ce fichier effacez/renommez-le au préalable ou spécifiez l'\''option \E[1;32m-f\E[0m pour forcer l'\''écrasement'
++ MSG_OVERWRITE_HINT='Si vous désirez ré-écrire ce fichier effacez/renommez-le au préalable ou spécifiez l'\''option \E[1;32m-f\E[0m pour forcer l'\''écrasement'
++ readonly 'MSG_WRITE_ERROR=Ecriture de : %s impossible.\nVeuillez vérifier que vous avez l'\''autorisation d'\''écrire ce fichier et que son nom est correct.\n'
++ MSG_WRITE_ERROR='Ecriture de : %s impossible.\nVeuillez vérifier que vous avez l'\''autorisation d'\''écrire ce fichier et que son nom est correct.\n'
++ readonly 'MSG_INSUFFICIENT_SPACE=Espace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n'
++ MSG_INSUFFICIENT_SPACE='Espace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n'
++ readonly 'MSG_CHUNKS_AVAIL=fichiers déjà traités.'
++ MSG_CHUNKS_AVAIL='fichiers déjà traités.'
++ readonly 'MSG_INFO_DELETED_OLD_FILE=Fichier partiel incohérent supprimé par option \E[1;32m-f\E[0m'
++ MSG_INFO_DELETED_OLD_FILE='Fichier partiel incohérent supprimé par option \E[1;32m-f\E[0m'
++ readonly 'MSG_INCOHERENT_PARTIAL_FILE=La taille du fichier partiel n'\''est pas un multiple de la taille de découpage des fichiers xtm.\nSupprimez ce fichier (%s.part) ou utilisez l'\''option \E[1;32m-f\E[0m\n'
++ MSG_INCOHERENT_PARTIAL_FILE='La taille du fichier partiel n'\''est pas un multiple de la taille de découpage des fichiers xtm.\nSupprimez ce fichier (%s.part) ou utilisez l'\''option \E[1;32m-f\E[0m\n'
++ readonly 'MSG_ALL_CHECKED_OK=Vérifications pour le fichier résultat terminées.'
++ MSG_ALL_CHECKED_OK='Vérifications pour le fichier résultat terminées.'
++ readonly 'MSG_PROCESSING_START=\E[1mTraitement optimisé des %u fichiers\E[0m\n'
++ MSG_PROCESSING_START='\E[1mTraitement optimisé des %u fichiers\E[0m\n'
++ readonly 'MSG_PROCESSING_RESTART=\E[1mReprise du traitement à partir du fichier %u\E[0m\nReste à traiter %u fichier(s)\n'
++ MSG_PROCESSING_RESTART='\E[1mReprise du traitement à partir du fichier %u\E[0m\nReste à traiter %u fichier(s)\n'
++ readonly MSG_SEPARATOR===================================
++ MSG_SEPARATOR===================================
++ readonly 'MSG_PROCESSING_FILE=Traitement de %s%3.3u.xtm ...  '
++ MSG_PROCESSING_FILE='Traitement de %s%3.3u.xtm ...  '
++ readonly 'MSG_FILE_MISSING=*** Le fichier est manquant ou de taille incorrecte.'
++ MSG_FILE_MISSING='*** Le fichier est manquant ou de taille incorrecte.'
++ readonly 'MSG_FILE_MISSING_TIP=*** Relancez le programme lorsque le fichier sera complet.'
++ MSG_FILE_MISSING_TIP='*** Relancez le programme lorsque le fichier sera complet.'
++ readonly E_BAD_OPTION=65
++ E_BAD_OPTION=65
++ readonly E_UNKNOWN_OPTION=66
++ E_UNKNOWN_OPTION=66
++ readonly E_TOO_MANY_PARAMS=67
++ E_TOO_MANY_PARAMS=67
++ readonly E_UNSPECIFIED_SOURCE_FILE=68
++ E_UNSPECIFIED_SOURCE_FILE=68
++ readonly E_MSG_OPTION_M_AND_N=69
++ E_MSG_OPTION_M_AND_N=69
++ readonly E_FIRST_FILE_ERROR=80
++ E_FIRST_FILE_ERROR=80
++ readonly E_LAST_FILE_ERROR=81
++ E_LAST_FILE_ERROR=81
++ readonly E_FILE_SIZES_ERROR=82
++ E_FILE_SIZES_ERROR=82
++ readonly E_WRITE_ERROR=83
++ E_WRITE_ERROR=83
++ readonly E_INSUFFICIENT_SPACE=83
++ E_INSUFFICIENT_SPACE=83
++ readonly E_INCOHERENT_PARTIAL_FILE=84
++ E_INCOHERENT_PARTIAL_FILE=84
++ readonly E_WARN_OVERWRITE=96
++ E_WARN_OVERWRITE=96
++ readonly E_CRITICAL_ERROR=127
++ E_CRITICAL_ERROR=127
++ declare -i i size SOURCE_FILE_NB DEST_FILE_NAME_LENGTH SPACE_AVAIL DISK_SPACE_NEEDED DEST_FILE_SIZE CHUNK_SIZE CHUNKS_AVAIL fMD5 LAST_SOURCE_FILE_SIZE
++ OPTION_m=
++ OPTION_n=
++ OPTION_f=
++ OPTION_v=
++ declare -i OPTION_t=0
++ DISPLAY_SOURCE_FILE_NAME=
++ DISPLAY_DEST_FILE_NAME=
++ CHUNKS_AVAIL=0
++ scan_parameters 2.pdf.001.xtm -v
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=2.pdf.001.xtm
++ for param in '"$@"'
++ case "$param" in
++ '[' -v == - ']'
++ i=1
++ '[' 1 -lt 2 ']'
++ case ${param:$i:1} in
++ OPTION_v=1
++ i=2
++ '[' 2 -lt 2 ']'
++ '[' -z 2.pdf.001.xtm ']'
+++ readlink -f 2.pdf.001.xtm
+++ '[' -h 2.pdf.001.xtm ']'
+++ target=2.pdf.001.xtm
+++++ dirname 2.pdf.001.xtm
++++ cd .
++++ pwd
+++ temp=/volume1/DATA/Incoming/Torrent/1
+++ '[' /volume1/DATA/Incoming/Torrent/1 '!=' / ']'
+++ temp=/volume1/DATA/Incoming/Torrent/1/
+++ echo -n /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ timing 1
++ '[' 0 -ge 1 ']'
++ '[' '!' 1 ']'
++ check_parameters
++ '[' ']'
++ v_echo 'Vérification d'\''existence du premier fichier source...'
++ '[' 1 ']'
++ echo -e '*** Vérification d'\''existence du premier fichier source...'
*** Vérification d'existence du premier fichier source...
+++ echo /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ RADIX=/volume1/DATA/Incoming/Torrent/1/2.pdf.
+++ echo 2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ DISPLAY_RADIX=2.pdf.
++ FIRST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ']'
++ v_echo 'Premier fichier source trouvé : 2.pdf.001.xtm'
++ '[' 1 ']'
++ echo -e '*** Premier fichier source trouvé : 2.pdf.001.xtm'
*** Premier fichier source trouvé : 2.pdf.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ fMD5='   1'
++ '[' 1 -eq 0 ']'
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ ls -l 2.pdf.001.xtm
+++ cut -d ' ' -f 5
+++ tr -s '[:blank:]'
++ CHUNK_SIZE=885984
+++ od -An -vtu4 -j92 -N4 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NB='         15'
+++ od -An -vtu8 -j96 -N8 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEST_FILE_SIZE='             13289755'
++ v_echo 'Vérification d'\''existence du dernier fichier source...'
++ '[' 1 ']'
++ echo -e '*** Vérification d'\''existence du dernier fichier source...'
*** Vérification d'existence du dernier fichier source...
+++ printf /volume1/DATA/Incoming/Torrent/1/2.pdf.%3.3u.xtm 15
++ LAST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
+++ printf 'Dernier fichier source trouvé: %s%3.3u.xtm\n' 2.pdf. 15
++ v_echo 'Dernier fichier source trouvé: 2.pdf.015.xtm'
++ '[' 1 ']'
++ echo -e '*** Dernier fichier source trouvé: 2.pdf.015.xtm'
*** Dernier fichier source trouvé: 2.pdf.015.xtm
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ ls -l 2.pdf.001.xtm
+++ cut -d ' ' -f 5
+++ tr -s '[:blank:]'
++ LAST_SOURCE_FILE_SIZE=885608
++ '[' 13289384 -eq 13289755 ']'
++ echo -e '\E[1;31mErreur\E[0m\nPremier ou dernier fichier de taille incohérente.'
Erreur
Premier ou dernier fichier de taille incohérente.
++ tip 82
++ echo -e '\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
Astuce : il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.
Vous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.
++ exit 82
NAS>
Très étrange !
stadros83 a écritVoici le résultat :
++ '[' 13289384 -eq 13289755 ']'
Là on en est à : 13 289 384 en taille calculée, et à 13 289 755 en taille indiquée dans l'entête du XTM.

Peux-tu faire
hd 2.pdf.001.xtm -n 104
ls -l 2.pdf.???.xtm
et coller le résultat des deux commandes.

...parce que là j'ai du mal à voir où se situe l'erreur de calcul. D'autant qu'un écart impair est quasiment impossible vu que l'entête et le MD5 ont tous deux une taille paire.
As-tu aussi vérifié ces fichiers là en les assemblant avec le programme d'origine ?
Ok j'essaierai de faire ça ce soir.

Par contre pour les fichiers normalement pas de soucis, je peux les recoller avec XTREMSPLIT.

J'ai aussi essayé avec des fichiers récupérés ailleurs. Je recolle bien avec Xtremsplit mais Erreur avec le script.
Alors :
NAS> hd 2.pdf.001.xtm -n 104
-ash: hd: not found
A priori pas de commande HD ?!
NAS> ls -l 2.pdf.???.xtm
-rwxrwxrwx    1 admin    users      886088 Apr 24 15:54 2.pdf.001.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.002.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.003.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.004.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.005.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.006.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.007.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.008.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.009.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.010.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.011.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.012.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.013.xtm
-rwxrwxrwx    1 admin    users      885984 Apr 24 15:54 2.pdf.014.xtm
-rwxrwxrwx    1 admin    users      886459 Apr 24 15:54 2.pdf.015.xtm
Vu !

Et au temps pour moi, quand on travaille sur plusieurs PC on finit par s'emmêler les pinceaux. La fonction qui calculait la taille des fichiers avait "en dur" le nom de ton premier fichier... d'où l'erreur de 371 sur le résultat (l'écart de taille entre le premier et le dernier fichier).

Tu reprendre le fichier du script spécial ici : celui-là spécial pour Busybox. et refaire le test.

... et à mon tour de te remercier pour ta patience.

(Pour le hd c'est pas grave, il a l'air d'avoir tout récupéré sans se planter avec le od)
  • [supprimé]

Depuis le début, je lis ton topic pour voir un peu ce qui se passe. C'est du beau boulot. Bravo et bonne continuation.
Merci 😃

Et c'est sûr, c'est pas facile de debugger sur un O.S. que tu n'as pas, et qui n'est guère virtualisable !.. mais on va finir par y arriver avec un peu de patience. :cool:
Voici le résultat :
NAS> bash -x busyXtremMerge 2.pdf.001.xtm -v
+ readonly 'MSG_BUSY_VERSION=busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0'
+ MSG_BUSY_VERSION='busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0'
++ dirname busyXtremMerge
+ THIS_SCRIPT_DIR=.
+ . ./tuXtremMerge
++ readonly 'MSG_ERROR=\E[1;31mErreur\E[0m\n'
++ MSG_ERROR='\E[1;31mErreur\E[0m\n'
++ readonly 'MSG_OK=\E[1;32mOK\E[0m'
++ MSG_OK='\E[1;32mOK\E[0m'
++ readonly 'MSG_ATTENTION=\E[1;33mAttention !\E[0m'
++ MSG_ATTENTION='\E[1;33mAttention !\E[0m'
++ readonly 'MSG_BAD_OPTION=Option - incorrecte'
++ MSG_BAD_OPTION='Option - incorrecte'
++ readonly 'MSG_TOO_MANY_PARAMS=Trop de paramètre :'
++ MSG_TOO_MANY_PARAMS='Trop de paramètre :'
++ readonly 'MSG_UNKNOWN_OPTION=Option inconnue :'
++ MSG_UNKNOWN_OPTION='Option inconnue :'
++ readonly 'MSG_UNSPECIFIED_SOURCE_FILE=Fichier source non spécifié'
++ MSG_UNSPECIFIED_SOURCE_FILE='Fichier source non spécifié'
++ readonly 'MSG_VERSION=tuXtremMerge (turbo XTM), version 1.5.5'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.5.5'
++ readonly 'MSG_OPTION_M_AND_N=Vous ne pouvez spécifier les options \E[1;32m-m\E[0m et \E[1;32m-n\E[0m simultanément.'
++ MSG_OPTION_M_AND_N='Vous ne pouvez spécifier les options \E[1;32m-m\E[0m et \E[1;32m-n\E[0m simultanément.'
++ readonly 'MSG_IGNORING_OPTION_F=L'\''option \E[1;32m-f\E[0m sera ignorée puisque l'\''option -\E[1;32m-m\E[0m est spécifiée.'
++ MSG_IGNORING_OPTION_F='L'\''option \E[1;32m-f\E[0m sera ignorée puisque l'\''option -\E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_IGNORING_DEST=Le nom du fichier résultat sera ignoré puisque l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ MSG_IGNORING_DEST='Le nom du fichier résultat sera ignoré puisque l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_CHECKING=Vérifications ...  '
++ MSG_CHECKING='Vérifications ...  '
++ readonly 'MSG_CHECKING_FIRST_SOURCE_FILE=Vérification d'\''existence du premier fichier source...'
++ MSG_CHECKING_FIRST_SOURCE_FILE='Vérification d'\''existence du premier fichier source...'
++ readonly 'MSG_TIP=\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
++ MSG_TIP='\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
++ readonly 'MSG_SUCCESS===================================================\n\E[1;32mToutes les opérations sont terminées avec succès !\E[0m'
++ MSG_SUCCESS='==================================================\n\E[1;32mToutes les opérations sont terminées avec succès !\E[0m'
++ readonly 'MSG_FIRST_FILE_ERROR=001.xtm non trouvé, vide ou erreur'
++ MSG_FIRST_FILE_ERROR='001.xtm non trouvé, vide ou erreur'
++ readonly 'MSG_FIRST_FILE_FOUND=Premier fichier source trouvé :'
++ MSG_FIRST_FILE_FOUND='Premier fichier source trouvé :'
++ readonly 'MSG_OPTION_M_AND_NO_MD5=\E[1;33mRien à faire !\E[0m\nL'\''option \E[1;32m-m\E[0m est spécifiée, or il n'\''y a pas MD5 à vérifier dans ces fichiers xtm.'
++ MSG_OPTION_M_AND_NO_MD5='\E[1;33mRien à faire !\E[0m\nL'\''option \E[1;32m-m\E[0m est spécifiée, or il n'\''y a pas MD5 à vérifier dans ces fichiers xtm.'
++ readonly 'MSG_CHECKING_LAST_SOURCE_FILE=Vérification d'\''existence du dernier fichier source...'
++ MSG_CHECKING_LAST_SOURCE_FILE='Vérification d'\''existence du dernier fichier source...'
++ readonly 'MSG_LAST_FILE_ERROR=Fichier %s%3.3u.xtm non trouvé ou vide\n'
++ MSG_LAST_FILE_ERROR='Fichier %s%3.3u.xtm non trouvé ou vide\n'
++ readonly 'MSG_LAST_FILE_FOUND=Dernier fichier source trouvé: %s%3.3u.xtm\n'
++ MSG_LAST_FILE_FOUND='Dernier fichier source trouvé: %s%3.3u.xtm\n'
++ readonly 'MSG_FILE_SIZES_OK=Tailles premier et dernier fichier cohérentes.'
++ MSG_FILE_SIZES_OK='Tailles premier et dernier fichier cohérentes.'
++ readonly 'MSG_FILE_SIZES_ERROR=Premier ou dernier fichier de taille incohérente.'
++ MSG_FILE_SIZES_ERROR='Premier ou dernier fichier de taille incohérente.'
++ readonly 'MSG_NO_FILE_WRITTEN=Aucun fichier résultat ne sera écrit car l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ MSG_NO_FILE_WRITTEN='Aucun fichier résultat ne sera écrit car l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_COMPUTING_DEST=Détermination de l'\''emplacement du résultat...'
++ MSG_COMPUTING_DEST='Détermination de l'\''emplacement du résultat...'
++ readonly 'MSG_DISPLAY_DEST=Emplacement du résultat :'
++ MSG_DISPLAY_DEST='Emplacement du résultat :'
++ readonly 'MSG_CHECK_DEST_WRITABLE=Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ MSG_CHECK_DEST_WRITABLE='Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ readonly 'MSG_WARN_FORCED_OVERWRITE=\nEcrasement forcé par l'\''option \E[1;32m-f\E[0m, le fichier résultat existe déjà.'
++ MSG_WARN_FORCED_OVERWRITE='\nEcrasement forcé par l'\''option \E[1;32m-f\E[0m, le fichier résultat existe déjà.'
++ readonly 'MSG_WARN_OVERWRITE=\nLe fichier : %s existe déjà.\n'
++ MSG_WARN_OVERWRITE='\nLe fichier : %s existe déjà.\n'
++ readonly 'MSG_FILE_SIZE_MATCHES=La taille du fichier correspond au résultat prévu dans le xtm.'
++ MSG_FILE_SIZE_MATCHES='La taille du fichier correspond au résultat prévu dans le xtm.'
++ readonly 'MSG_FILE_SIZE_DOES_NOT_MATCH=La taille du fichier ne correspond pas au résultat prévu dans le xtm.'
++ MSG_FILE_SIZE_DOES_NOT_MATCH='La taille du fichier ne correspond pas au résultat prévu dans le xtm.'
++ readonly 'MSG_OVERWRITE_HINT=Si vous désirez ré-écrire ce fichier effacez/renommez-le au préalable ou spécifiez l'\''option \E[1;32m-f\E[0m pour forcer l'\''écrasement'
++ MSG_OVERWRITE_HINT='Si vous désirez ré-écrire ce fichier effacez/renommez-le au préalable ou spécifiez l'\''option \E[1;32m-f\E[0m pour forcer l'\''écrasement'
++ readonly 'MSG_WRITE_ERROR=Ecriture de : %s impossible.\nVeuillez vérifier que vous avez l'\''autorisation d'\''écrire ce fichier et que son nom est correct.\n'
++ MSG_WRITE_ERROR='Ecriture de : %s impossible.\nVeuillez vérifier que vous avez l'\''autorisation d'\''écrire ce fichier et que son nom est correct.\n'
++ readonly 'MSG_INSUFFICIENT_SPACE=Espace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n'
++ MSG_INSUFFICIENT_SPACE='Espace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n'
++ readonly 'MSG_CHUNKS_AVAIL=fichiers déjà traités.'
++ MSG_CHUNKS_AVAIL='fichiers déjà traités.'
++ readonly 'MSG_INFO_DELETED_OLD_FILE=Fichier partiel incohérent supprimé par option \E[1;32m-f\E[0m'
++ MSG_INFO_DELETED_OLD_FILE='Fichier partiel incohérent supprimé par option \E[1;32m-f\E[0m'
++ readonly 'MSG_INCOHERENT_PARTIAL_FILE=La taille du fichier partiel n'\''est pas un multiple de la taille de découpage des fichiers xtm.\nSupprimez ce fichier (%s.part) ou utilisez l'\''option \E[1;32m-f\E[0m\n'
++ MSG_INCOHERENT_PARTIAL_FILE='La taille du fichier partiel n'\''est pas un multiple de la taille de découpage des fichiers xtm.\nSupprimez ce fichier (%s.part) ou utilisez l'\''option \E[1;32m-f\E[0m\n'
++ readonly 'MSG_ALL_CHECKED_OK=Vérifications pour le fichier résultat terminées.'
++ MSG_ALL_CHECKED_OK='Vérifications pour le fichier résultat terminées.'
++ readonly 'MSG_PROCESSING_START=\E[1mTraitement optimisé des %u fichiers\E[0m\n'
++ MSG_PROCESSING_START='\E[1mTraitement optimisé des %u fichiers\E[0m\n'
++ readonly 'MSG_PROCESSING_RESTART=\E[1mReprise du traitement à partir du fichier %u\E[0m\nReste à traiter %u fichier(s)\n'
++ MSG_PROCESSING_RESTART='\E[1mReprise du traitement à partir du fichier %u\E[0m\nReste à traiter %u fichier(s)\n'
++ readonly MSG_SEPARATOR===================================
++ MSG_SEPARATOR===================================
++ readonly 'MSG_PROCESSING_FILE=Traitement de %s%3.3u.xtm ...  '
++ MSG_PROCESSING_FILE='Traitement de %s%3.3u.xtm ...  '
++ readonly 'MSG_FILE_MISSING=*** Le fichier est manquant ou de taille incorrecte.'
++ MSG_FILE_MISSING='*** Le fichier est manquant ou de taille incorrecte.'
++ readonly 'MSG_FILE_MISSING_TIP=*** Relancez le programme lorsque le fichier sera complet.'
++ MSG_FILE_MISSING_TIP='*** Relancez le programme lorsque le fichier sera complet.'
++ readonly E_BAD_OPTION=65
++ E_BAD_OPTION=65
++ readonly E_UNKNOWN_OPTION=66
++ E_UNKNOWN_OPTION=66
++ readonly E_TOO_MANY_PARAMS=67
++ E_TOO_MANY_PARAMS=67
++ readonly E_UNSPECIFIED_SOURCE_FILE=68
++ E_UNSPECIFIED_SOURCE_FILE=68
++ readonly E_MSG_OPTION_M_AND_N=69
++ E_MSG_OPTION_M_AND_N=69
++ readonly E_FIRST_FILE_ERROR=80
++ E_FIRST_FILE_ERROR=80
++ readonly E_LAST_FILE_ERROR=81
++ E_LAST_FILE_ERROR=81
++ readonly E_FILE_SIZES_ERROR=82
++ E_FILE_SIZES_ERROR=82
++ readonly E_WRITE_ERROR=83
++ E_WRITE_ERROR=83
++ readonly E_INSUFFICIENT_SPACE=83
++ E_INSUFFICIENT_SPACE=83
++ readonly E_INCOHERENT_PARTIAL_FILE=84
++ E_INCOHERENT_PARTIAL_FILE=84
++ readonly E_WARN_OVERWRITE=96
++ E_WARN_OVERWRITE=96
++ readonly E_CRITICAL_ERROR=127
++ E_CRITICAL_ERROR=127
++ declare -i i size SOURCE_FILE_NB DEST_FILE_NAME_LENGTH SPACE_AVAIL DISK_SPACE_NEEDED DEST_FILE_SIZE CHUNK_SIZE CHUNKS_AVAIL fMD5 LAST_SOURCE_FILE_SIZE
++ OPTION_m=
++ OPTION_n=
++ OPTION_f=
++ OPTION_v=
++ declare -i OPTION_t=0
++ DISPLAY_SOURCE_FILE_NAME=
++ DISPLAY_DEST_FILE_NAME=
++ CHUNKS_AVAIL=0
++ scan_parameters 2.pdf.001.xtm -v
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=2.pdf.001.xtm
++ for param in '"$@"'
++ case "$param" in
++ '[' -v == - ']'
++ i=1
++ '[' 1 -lt 2 ']'
++ case ${param:$i:1} in
++ OPTION_v=1
++ i=2
++ '[' 2 -lt 2 ']'
++ '[' -z 2.pdf.001.xtm ']'
+++ readlink -f 2.pdf.001.xtm
+++ '[' -h 2.pdf.001.xtm ']'
+++ target=2.pdf.001.xtm
+++++ dirname 2.pdf.001.xtm
++++ cd .
++++ pwd
+++ temp=/volume1/DATA/Incoming/Torrent/1
+++ '[' /volume1/DATA/Incoming/Torrent/1 '!=' / ']'
+++ temp=/volume1/DATA/Incoming/Torrent/1/
+++ echo -n /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ timing 1
++ '[' 0 -ge 1 ']'
++ '[' '!' 1 ']'
++ check_parameters
++ '[' ']'
++ v_echo 'Vérification d'\''existence du premier fichier source...'
++ '[' 1 ']'
++ echo -e '*** Vérification d'\''existence du premier fichier source...'
*** Vérification d'existence du premier fichier source...
+++ echo /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ RADIX=/volume1/DATA/Incoming/Torrent/1/2.pdf.
+++ echo 2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ DISPLAY_RADIX=2.pdf.
++ FIRST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ']'
++ v_echo 'Premier fichier source trouvé : 2.pdf.001.xtm'
++ '[' 1 ']'
++ echo -e '*** Premier fichier source trouvé : 2.pdf.001.xtm'
*** Premier fichier source trouvé : 2.pdf.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ fMD5='   1'
++ '[' 1 -eq 0 ']'
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ ls -l /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ CHUNK_SIZE=885984
+++ od -An -vtu4 -j92 -N4 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NB='         15'
+++ od -An -vtu8 -j96 -N8 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEST_FILE_SIZE='             13289755'
++ v_echo 'Vérification d'\''existence du dernier fichier source...'
++ '[' 1 ']'
++ echo -e '*** Vérification d'\''existence du dernier fichier source...'
*** Vérification d'existence du dernier fichier source...
+++ printf /volume1/DATA/Incoming/Torrent/1/2.pdf.%3.3u.xtm 15
++ LAST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
+++ printf 'Dernier fichier source trouvé: %s%3.3u.xtm\n' 2.pdf. 15
++ v_echo 'Dernier fichier source trouvé: 2.pdf.015.xtm'
++ '[' 1 ']'
++ echo -e '*** Dernier fichier source trouvé: 2.pdf.015.xtm'
*** Dernier fichier source trouvé: 2.pdf.015.xtm
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ ls -l /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ LAST_SOURCE_FILE_SIZE=885979
++ '[' 13289755 -eq 13289755 ']'
++ v_echo 'Tailles premier et dernier fichier cohérentes.'
++ '[' 1 ']'
++ echo -e '*** Tailles premier et dernier fichier cohérentes.'
*** Tailles premier et dernier fichier cohérentes.
++ '[' ']'
++ v_echo 'Détermination de l'\''emplacement du résultat...'
++ '[' 1 ']'
++ echo -e '*** Détermination de l'\''emplacement du résultat...'
*** Détermination de l'emplacement du résultat...
++ '[' -z '' ']'
+++ od -An -vtu1 -j40 -N1 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEST_FILE_NAME_LENGTH='  22'
+++ od -An -S1 -j41 -N22 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
od: invalid option -- S
Try `od --help' for more information.
++ DEFAULT_DEST_FILE_NAME=
++ '[' -z '' ']'
+++ basename 2.pdf.001.xtm
++ this_file_basename=2.pdf.001.xtm
++ this_file_radix=
++ DISPLAY_DEST_FILE_NAME=
++ v_echo 'Emplacement du résultat : '
++ '[' 1 ']'
++ echo -e '*** Emplacement du résultat : '
*** Emplacement du résultat :
+++ readlink -fn ''
+++ '[' -h '' ']'
+++ target=
+++++ dirname ''
++++ cd .
++++ pwd
+++ temp=/volume1/DATA/Incoming/Torrent/1
+++ '[' /volume1/DATA/Incoming/Torrent/1 '!=' / ']'
+++ temp=/volume1/DATA/Incoming/Torrent/1/
+++ echo -n /volume1/DATA/Incoming/Torrent/1/
++ DEST_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/
++ DEST_FILE_NAME_PART=/volume1/DATA/Incoming/Torrent/1/.part
++ v_echo 'Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ '[' 1 ']'
++ echo -e '*** Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
*** Vérification de la possibilité d'écrire le résultat : existence, autorisation d'écriture, espace disponible, etc...
++ '[' -f /volume1/DATA/Incoming/Torrent/1/ ']'
++ touch /volume1/DATA/Incoming/Torrent/1/ /volume1/DATA/Incoming/Torrent/1/.part
++ '[' 0 -ne 0 ']'
+++ df -B1 /volume1/DATA/Incoming/Torrent/1/
+++ sed -n 2p
df: invalid option -- B
BusyBox v1.10.3 (2010-05-17 07:26:08 UTC) multi-call binary

Usage: df [-hmk] [FILESYSTEM...]

Print filesystem usage statistics

Options:
        -h      Human readable (e.g. 1K 243M 2G)
        -m      1024*1024 blocks
        -k      1024 blocks

++ TMP=
+++ echo
+++ cut -d ' ' -f 4
++ SPACE_AVAIL=
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/.part
+++ ls -l /volume1/DATA/Incoming/Torrent/1/.part
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ size=0
++ DISK_SPACE_NEEDED=13289755
++ '[' 13289755 == 0 ']'
++ '[' 0 -lt 13289755 ']'
+++ echo
+++ cut -d ' ' -f 6
++ printf '\E[1;31mErreur\E[0m\nEspace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n' '' 13289755 0
Erreur
Espace insuffisant sur  pour créer le fichier 13289755.
Espace nécessaire : 0
Espace disponible : 0
++ exit 83
NAS>

Il me crée un fichier .part de 0 ko.
Ah ben là le "bug" il est chez toi 😉

Tu n'as pas la bonne version de tuXtremMerge !

Faut celle là pour le script "standard" : celui-là qui est standard pour tout le monde.

En effet, maintenant on "passe" le contrôle des tailles et existence des fichiers, mais on "bute" sur le contrôle de l'espace disponible pour copier le résultat.

Or comme j'avais déjà vu que l'option -B1 n'existait pas sur le df de ta busybox, cela est déjà remplacé dans le script standard par un test à 1024 octets près, chose standard dans df.

Peux-tu donc refaire le test en ayant écrasé ta version actuelle de tuXtremMerge par la version dont le lien est ci-dessus, et voir jusqu'où on va !..

(P.S. : le fichier à 0 c'est normal, ça sert en autre à vérifier qu'on a bien le droit d'écrire à l'endroit où tu veux mettre le résultat. En effet, sur les Systèmes de Fichier Linux, tu peux restreindre les droits et avoir alors un problème lorsque tu veux copier le résultat)
Presque bon, j'ai quand même un soucis :
NAS> bash -x busyXtremMerge 2.pdf.001.xtm -v
+ readonly 'MSG_BUSY_VERSION=busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0'
+ MSG_BUSY_VERSION='busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0'
++ dirname busyXtremMerge
+ THIS_SCRIPT_DIR=.
+ . ./tuXtremMerge
++ readonly 'MSG_ERROR=\E[1;31mErreur\E[0m\n'
++ MSG_ERROR='\E[1;31mErreur\E[0m\n'
++ readonly 'MSG_OK=\E[1;32mOK\E[0m'
++ MSG_OK='\E[1;32mOK\E[0m'
++ readonly 'MSG_ATTENTION=\E[1;33mAttention !\E[0m'
++ MSG_ATTENTION='\E[1;33mAttention !\E[0m'
++ readonly 'MSG_BAD_OPTION=Option - incorrecte'
++ MSG_BAD_OPTION='Option - incorrecte'
++ readonly 'MSG_TOO_MANY_PARAMS=Trop de paramètre :'
++ MSG_TOO_MANY_PARAMS='Trop de paramètre :'
++ readonly 'MSG_UNKNOWN_OPTION=Option inconnue :'
++ MSG_UNKNOWN_OPTION='Option inconnue :'
++ readonly 'MSG_UNSPECIFIED_SOURCE_FILE=Fichier source non spécifié'
++ MSG_UNSPECIFIED_SOURCE_FILE='Fichier source non spécifié'
++ readonly 'MSG_VERSION=tuXtremMerge (turbo XTM), version 1.5.5'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.5.5'
++ readonly 'MSG_OPTION_M_AND_N=Vous ne pouvez spécifier les options \E[1;32m-m\E[0m et \E[1;32m-n\E[0m simultanément.'
++ MSG_OPTION_M_AND_N='Vous ne pouvez spécifier les options \E[1;32m-m\E[0m et \E[1;32m-n\E[0m simultanément.'
++ readonly 'MSG_IGNORING_OPTION_F=L'\''option \E[1;32m-f\E[0m sera ignorée puisque l'\''option -\E[1;32m-m\E[0m est spécifiée.'
++ MSG_IGNORING_OPTION_F='L'\''option \E[1;32m-f\E[0m sera ignorée puisque l'\''option -\E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_IGNORING_DEST=Le nom du fichier résultat sera ignoré puisque l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ MSG_IGNORING_DEST='Le nom du fichier résultat sera ignoré puisque l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_CHECKING=Vérifications ...  '
++ MSG_CHECKING='Vérifications ...  '
++ readonly 'MSG_CHECKING_FIRST_SOURCE_FILE=Vérification d'\''existence du premier fichier source...'
++ MSG_CHECKING_FIRST_SOURCE_FILE='Vérification d'\''existence du premier fichier source...'
++ readonly 'MSG_TIP=\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
++ MSG_TIP='\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
++ readonly 'MSG_SUCCESS===================================================\n\E[1;32mToutes les opérations sont terminées avec succès !\E[0m'
++ MSG_SUCCESS='==================================================\n\E[1;32mToutes les opérations sont terminées avec succès !\E[0m'
++ readonly 'MSG_FIRST_FILE_ERROR=001.xtm non trouvé, vide ou erreur'
++ MSG_FIRST_FILE_ERROR='001.xtm non trouvé, vide ou erreur'
++ readonly 'MSG_FIRST_FILE_FOUND=Premier fichier source trouvé :'
++ MSG_FIRST_FILE_FOUND='Premier fichier source trouvé :'
++ readonly 'MSG_OPTION_M_AND_NO_MD5=\E[1;33mRien à faire !\E[0m\nL'\''option \E[1;32m-m\E[0m est spécifiée, or il n'\''y a pas MD5 à vérifier dans ces fichiers xtm.'
++ MSG_OPTION_M_AND_NO_MD5='\E[1;33mRien à faire !\E[0m\nL'\''option \E[1;32m-m\E[0m est spécifiée, or il n'\''y a pas MD5 à vérifier dans ces fichiers xtm.'
++ readonly 'MSG_CHECKING_LAST_SOURCE_FILE=Vérification d'\''existence du dernier fichier source...'
++ MSG_CHECKING_LAST_SOURCE_FILE='Vérification d'\''existence du dernier fichier source...'
++ readonly 'MSG_LAST_FILE_ERROR=Fichier %s%3.3u.xtm non trouvé ou vide\n'
++ MSG_LAST_FILE_ERROR='Fichier %s%3.3u.xtm non trouvé ou vide\n'
++ readonly 'MSG_LAST_FILE_FOUND=Dernier fichier source trouvé: %s%3.3u.xtm\n'
++ MSG_LAST_FILE_FOUND='Dernier fichier source trouvé: %s%3.3u.xtm\n'
++ readonly 'MSG_FILE_SIZES_OK=Tailles premier et dernier fichier cohérentes.'
++ MSG_FILE_SIZES_OK='Tailles premier et dernier fichier cohérentes.'
++ readonly 'MSG_FILE_SIZES_ERROR=Premier ou dernier fichier de taille incohérente.'
++ MSG_FILE_SIZES_ERROR='Premier ou dernier fichier de taille incohérente.'
++ readonly 'MSG_NO_FILE_WRITTEN=Aucun fichier résultat ne sera écrit car l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ MSG_NO_FILE_WRITTEN='Aucun fichier résultat ne sera écrit car l'\''option \E[1;32m-m\E[0m est spécifiée.'
++ readonly 'MSG_COMPUTING_DEST=Détermination de l'\''emplacement du résultat...'
++ MSG_COMPUTING_DEST='Détermination de l'\''emplacement du résultat...'
++ readonly 'MSG_DISPLAY_DEST=Emplacement du résultat :'
++ MSG_DISPLAY_DEST='Emplacement du résultat :'
++ readonly 'MSG_CHECK_DEST_WRITABLE=Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ MSG_CHECK_DEST_WRITABLE='Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ readonly 'MSG_WARN_FORCED_OVERWRITE=\nEcrasement forcé par l'\''option \E[1;32m-f\E[0m, le fichier résultat existe déjà.'
++ MSG_WARN_FORCED_OVERWRITE='\nEcrasement forcé par l'\''option \E[1;32m-f\E[0m, le fichier résultat existe déjà.'
++ readonly 'MSG_WARN_OVERWRITE=\nLe fichier : %s existe déjà.\n'
++ MSG_WARN_OVERWRITE='\nLe fichier : %s existe déjà.\n'
++ readonly 'MSG_FILE_SIZE_MATCHES=La taille du fichier correspond au résultat prévu dans le xtm.'
++ MSG_FILE_SIZE_MATCHES='La taille du fichier correspond au résultat prévu dans le xtm.'
++ readonly 'MSG_FILE_SIZE_DOES_NOT_MATCH=La taille du fichier ne correspond pas au résultat prévu dans le xtm.'
++ MSG_FILE_SIZE_DOES_NOT_MATCH='La taille du fichier ne correspond pas au résultat prévu dans le xtm.'
++ readonly 'MSG_OVERWRITE_HINT=Si vous désirez ré-écrire ce fichier effacez/renommez-le au préalable ou spécifiez l'\''option \E[1;32m-f\E[0m pour forcer l'\''écrasement'
++ MSG_OVERWRITE_HINT='Si vous désirez ré-écrire ce fichier effacez/renommez-le au préalable ou spécifiez l'\''option \E[1;32m-f\E[0m pour forcer l'\''écrasement'
++ readonly 'MSG_WRITE_ERROR=Ecriture de : %s impossible.\nVeuillez vérifier que vous avez l'\''autorisation d'\''écrire ce fichier et que son nom est correct.\n'
++ MSG_WRITE_ERROR='Ecriture de : %s impossible.\nVeuillez vérifier que vous avez l'\''autorisation d'\''écrire ce fichier et que son nom est correct.\n'
++ readonly 'MSG_INSUFFICIENT_SPACE=Espace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n'
++ MSG_INSUFFICIENT_SPACE='Espace insuffisant sur %s pour créer le fichier %s.\nEspace nécessaire : %'\''u\nEspace disponible : %'\''u\n'
++ readonly 'MSG_CHUNKS_AVAIL=fichiers déjà traités.'
++ MSG_CHUNKS_AVAIL='fichiers déjà traités.'
++ readonly 'MSG_INFO_DELETED_OLD_FILE=Fichier partiel incohérent supprimé par option \E[1;32m-f\E[0m'
++ MSG_INFO_DELETED_OLD_FILE='Fichier partiel incohérent supprimé par option \E[1;32m-f\E[0m'
++ readonly 'MSG_INCOHERENT_PARTIAL_FILE=La taille du fichier partiel n'\''est pas un multiple de la taille de découpage des fichiers xtm.\nSupprimez ce fichier (%s.part) ou utilisez l'\''option \E[1;32m-f\E[0m\n'
++ MSG_INCOHERENT_PARTIAL_FILE='La taille du fichier partiel n'\''est pas un multiple de la taille de découpage des fichiers xtm.\nSupprimez ce fichier (%s.part) ou utilisez l'\''option \E[1;32m-f\E[0m\n'
++ readonly 'MSG_ALL_CHECKED_OK=Vérifications pour le fichier résultat terminées.'
++ MSG_ALL_CHECKED_OK='Vérifications pour le fichier résultat terminées.'
++ readonly 'MSG_PROCESSING_START=\E[1mTraitement optimisé des %u fichiers\E[0m\n'
++ MSG_PROCESSING_START='\E[1mTraitement optimisé des %u fichiers\E[0m\n'
++ readonly 'MSG_PROCESSING_RESTART=\E[1mReprise du traitement à partir du fichier %u\E[0m\nReste à traiter %u fichier(s)\n'
++ MSG_PROCESSING_RESTART='\E[1mReprise du traitement à partir du fichier %u\E[0m\nReste à traiter %u fichier(s)\n'
++ readonly MSG_SEPARATOR===================================
++ MSG_SEPARATOR===================================
++ readonly 'MSG_PROCESSING_FILE=Traitement de %s%3.3u.xtm ...  '
++ MSG_PROCESSING_FILE='Traitement de %s%3.3u.xtm ...  '
++ readonly 'MSG_FILE_MISSING=*** Le fichier est manquant ou de taille incorrecte.'
++ MSG_FILE_MISSING='*** Le fichier est manquant ou de taille incorrecte.'
++ readonly 'MSG_FILE_MISSING_TIP=*** Relancez le programme lorsque le fichier sera complet.'
++ MSG_FILE_MISSING_TIP='*** Relancez le programme lorsque le fichier sera complet.'
++ readonly E_BAD_OPTION=65
++ E_BAD_OPTION=65
++ readonly E_UNKNOWN_OPTION=66
++ E_UNKNOWN_OPTION=66
++ readonly E_TOO_MANY_PARAMS=67
++ E_TOO_MANY_PARAMS=67
++ readonly E_UNSPECIFIED_SOURCE_FILE=68
++ E_UNSPECIFIED_SOURCE_FILE=68
++ readonly E_MSG_OPTION_M_AND_N=69
++ E_MSG_OPTION_M_AND_N=69
++ readonly E_FIRST_FILE_ERROR=80
++ E_FIRST_FILE_ERROR=80
++ readonly E_LAST_FILE_ERROR=81
++ E_LAST_FILE_ERROR=81
++ readonly E_FILE_SIZES_ERROR=82
++ E_FILE_SIZES_ERROR=82
++ readonly E_WRITE_ERROR=83
++ E_WRITE_ERROR=83
++ readonly E_INSUFFICIENT_SPACE=83
++ E_INSUFFICIENT_SPACE=83
++ readonly E_INCOHERENT_PARTIAL_FILE=84
++ E_INCOHERENT_PARTIAL_FILE=84
++ readonly E_WARN_OVERWRITE=96
++ E_WARN_OVERWRITE=96
++ readonly E_CRITICAL_ERROR=127
++ E_CRITICAL_ERROR=127
++ declare -i i size SOURCE_FILE_NB DEST_FILE_NAME_LENGTH SPACE_AVAIL DISK_SPACE_NEEDED DEST_FILE_SIZE CHUNK_SIZE CHUNKS_AVAIL fMD5 LAST_SOURCE_FILE_SIZE
++ OPTION_m=
++ OPTION_n=
++ OPTION_f=
++ OPTION_v=
++ declare -i OPTION_t=0
++ DISPLAY_SOURCE_FILE_NAME=
++ DISPLAY_DEST_FILE_NAME=
++ CHUNKS_AVAIL=0
++ scan_parameters 2.pdf.001.xtm -v
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=2.pdf.001.xtm
++ for param in '"$@"'
++ case "$param" in
++ '[' -v == - ']'
++ i=1
++ '[' 1 -lt 2 ']'
++ case ${param:$i:1} in
++ OPTION_v=1
++ i=2
++ '[' 2 -lt 2 ']'
++ '[' -z 2.pdf.001.xtm ']'
+++ readlink -f 2.pdf.001.xtm
+++ '[' -h 2.pdf.001.xtm ']'
+++ target=2.pdf.001.xtm
+++++ dirname 2.pdf.001.xtm
++++ cd .
++++ pwd
+++ temp=/volume1/DATA/Incoming/Torrent/1
+++ '[' /volume1/DATA/Incoming/Torrent/1 '!=' / ']'
+++ temp=/volume1/DATA/Incoming/Torrent/1/
+++ echo -n /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ timing 1
++ '[' 0 -ge 1 ']'
++ '[' '!' 1 ']'
++ check_parameters
++ '[' ']'
++ v_echo 'Vérification d'\''existence du premier fichier source...'
++ '[' 1 ']'
++ echo -e '*** Vérification d'\''existence du premier fichier source...'
*** Vérification d'existence du premier fichier source...
+++ echo /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ RADIX=/volume1/DATA/Incoming/Torrent/1/2.pdf.
+++ echo 2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ DISPLAY_RADIX=2.pdf.
++ FIRST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ']'
++ v_echo 'Premier fichier source trouvé : 2.pdf.001.xtm'
++ '[' 1 ']'
++ echo -e '*** Premier fichier source trouvé : 2.pdf.001.xtm'
*** Premier fichier source trouvé : 2.pdf.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ fMD5='   1'
++ '[' 1 -eq 0 ']'
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ ls -l /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ CHUNK_SIZE=885984
+++ od -An -vtu4 -j92 -N4 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NB='         15'
+++ od -An -vtu8 -j96 -N8 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEST_FILE_SIZE='             13289755'
++ v_echo 'Vérification d'\''existence du dernier fichier source...'
++ '[' 1 ']'
++ echo -e '*** Vérification d'\''existence du dernier fichier source...'
*** Vérification d'existence du dernier fichier source...
+++ printf /volume1/DATA/Incoming/Torrent/1/2.pdf.%3.3u.xtm 15
++ LAST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
+++ printf 'Dernier fichier source trouvé: %s%3.3u.xtm\n' 2.pdf. 15
++ v_echo 'Dernier fichier source trouvé: 2.pdf.015.xtm'
++ '[' 1 ']'
++ echo -e '*** Dernier fichier source trouvé: 2.pdf.015.xtm'
*** Dernier fichier source trouvé: 2.pdf.015.xtm
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ ls -l /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ LAST_SOURCE_FILE_SIZE=885979
++ '[' 13289755 -eq 13289755 ']'
++ v_echo 'Tailles premier et dernier fichier cohérentes.'
++ '[' 1 ']'
++ echo -e '*** Tailles premier et dernier fichier cohérentes.'
*** Tailles premier et dernier fichier cohérentes.
++ '[' ']'
++ v_echo 'Détermination de l'\''emplacement du résultat...'
++ '[' 1 ']'
++ echo -e '*** Détermination de l'\''emplacement du résultat...'
*** Détermination de l'emplacement du résultat...
++ '[' -z '' ']'
+++ od -An -vtu1 -j40 -N1 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEST_FILE_NAME_LENGTH='  22'
+++ od -An -S1 -j41 -N22 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
od: invalid option -- S
Try `od --help' for more information.
++ DEFAULT_DEST_FILE_NAME=
++ '[' -z '' ']'
+++ basename 2.pdf.001.xtm
++ this_file_basename=2.pdf.001.xtm
++ this_file_radix=
++ DISPLAY_DEST_FILE_NAME=
++ v_echo 'Emplacement du résultat : '
++ '[' 1 ']'
++ echo -e '*** Emplacement du résultat : '
*** Emplacement du résultat :
+++ readlink -fn ''
+++ '[' -h '' ']'
+++ target=
+++++ dirname ''
++++ cd .
++++ pwd
+++ temp=/volume1/DATA/Incoming/Torrent/1
+++ '[' /volume1/DATA/Incoming/Torrent/1 '!=' / ']'
+++ temp=/volume1/DATA/Incoming/Torrent/1/
+++ echo -n /volume1/DATA/Incoming/Torrent/1/
++ DEST_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/
++ DEST_FILE_NAME_PART=/volume1/DATA/Incoming/Torrent/1/.part
++ v_echo 'Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
++ '[' 1 ']'
++ echo -e '*** Vérification de la possibilité d'\''écrire le résultat : existence, autorisation d'\''écriture, espace disponible, etc...'
*** Vérification de la possibilité d'écrire le résultat : existence, autorisation d'écriture, espace disponible, etc...
++ '[' -f /volume1/DATA/Incoming/Torrent/1/ ']'
++ touch /volume1/DATA/Incoming/Torrent/1/ /volume1/DATA/Incoming/Torrent/1/.part
++ '[' 0 -ne 0 ']'
+++ df /volume1/DATA/Incoming/Torrent/1/
+++ sed -n 2p
++ TMP='/dev/vg1/lv          5749954288 1717147912 4032703976  30% /volume1'
+++ echo /dev/vg1/lv 5749954288 1717147912 4032703976 30% /volume1
+++ cut '-d ' -f 4
++ SPACE_AVAIL=4129488870400
+++ echo /dev/vg1/lv 5749954288 1717147912 4032703976 30% /volume1
+++ cut '-d ' -f 6
++ v_echo 'Espace disponible : 4129488870400, sur /volume1'
++ '[' 1 ']'
++ echo -e '*** Espace disponible : 4129488870400, sur /volume1'
*** Espace disponible : 4129488870400, sur /volume1
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/.part
+++ ls -l /volume1/DATA/Incoming/Torrent/1/.part
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ size=0
++ DISK_SPACE_NEEDED=13289755
++ '[' 13289755 == 0 ']'
++ '[' 4129488870400 -lt 13289755 ']'
++ CHUNKS_AVAIL=0
++ '[' 0 -eq 0 ']'
++ v_echo '0 fichiers déjà traités.'
++ '[' 1 ']'
++ echo -e '*** 0 fichiers déjà traités.'
*** 0 fichiers déjà traités.
++ v_echo 'Vérifications pour le fichier résultat terminées.'
++ '[' 1 ']'
++ echo -e '*** Vérifications pour le fichier résultat terminées.'
*** Vérifications pour le fichier résultat terminées.
++ '[' ']'
++ '[' 1 -eq 0 ']'
++ '[' ']'
++ MD5_PROG=md5sum
++ '[' '!' 1 ']'
++ timing 1
++ '[' 0 -ge 1 ']'
++ '[' 0 -eq 0 ']'
++ printf '\E[1mTraitement optimisé des %u fichiers\E[0m\n' 15
Traitement optimisé des 15 fichiers
++ echo ==================================
==================================
++ i=0
++ ((  0 < 15  ))
++ '[' 1 -eq 1 ']'
+++ od -An -S1 -j 885979 -N32 /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
od: invalid option -- S
Try `od --help' for more information.
++ this_file_MD5=
++ i=1
+++ printf %s%3.3u /volume1/DATA/Incoming/Torrent/1/2.pdf. 1
++ this_file_radix=/volume1/DATA/Incoming/Torrent/1/2.pdf.001
++ printf 'Traitement de %s%3.3u.xtm ...  ' 2.pdf. 1
Traitement de 2.pdf.001.xtm ...  ++ case $i in
++ dd if=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm bs=104 count=1
++ md5sum --status -c /dev/fd/63
+++ echo ' *-'
md5sum: /dev/fd/63: No such file or directory
++ '[' 1 -eq 0 ']'
++ echo -e '\E[1;31mErreur\E[0m\n'
Erreur

++ '[' '!' ']'
++ rm /volume1/DATA/Incoming/Torrent/1/.part /volume1/DATA/Incoming/Torrent/1/
++ exit 127