#76 Le 17/05/2011, à 01:23
- Ypnose
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
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.
#77 Le 17/05/2011, à 07:02
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
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.
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#78 Le 17/05/2011, à 18:40
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
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.
Hors ligne
#79 Le 17/05/2011, à 18:59
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
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)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#80 Le 17/05/2011, à 20:08
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
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
Hors ligne
#81 Le 17/05/2011, à 23:22
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Ah oui, on touche au bout... mais enfin, là on est dans "le vif du sujet", c'est à dire qu'on a fait toutes les vérifications préalables et on recolle le fichier !..
Alors comme le suggère Linux (busybox en l'occurrence) qui est fort sympa, il faudrait que tu me fasses :
od --help
et tant qu'on y est :
md5sum --help
Le od en question sert à récupérer le MD5 du fichier que l'on est en train de recoller pour voir s'il est correct. C'est contournable au pire par un dd, puisqu'à cet endroit on ne lit des MD5 et ce sont donc des chaines de caractères.
Et puisque c'est cette vérification qui pose problème, en attendant que je trouve une solution après que tu m'auras fait les deux commandes ci-dessus, tu peux toujours essayer :
bash busyXtremMerge -vn 2.pdf.001.xtm
Le 'n' dans les options va désactiver la vérification md5, et donc contourner les instructions qui bloquent présentement. Ca permettra entre autres de vérifier que rien d'autre ne bloque.
Dernière modification par Zakhar (Le 17/05/2011, à 23:24)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#82 Le 18/05/2011, à 18:04
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Voici les résultats :
NAS> od --help
Usage: od [OPTION]... [FILE]...
or: od --traditional [FILE] [[+]OFFSET [[+]LABEL]]
Write an unambiguous representation, octal bytes by default,
of FILE to standard output. With more than one FILE argument,
concatenate them in the listed order to form the input.
With no FILE, or when FILE is -, read standard input.
All arguments to long options are mandatory for short options.
-A, --address-radix=RADIX decide how file offsets are printed
-j, --skip-bytes=BYTES skip BYTES input bytes first
-N, --read-bytes=BYTES limit dump to BYTES input bytes
-s, --strings[=BYTES] output strings of at least BYTES graphic chars
-t, --format=TYPE select output format or formats
-v, --output-duplicates do not use * to mark line suppression
-w, --width[=BYTES] output BYTES bytes per output line
--traditional accept arguments in traditional form
--help display this help and exit
--version output version information and exit
Traditional format specifications may be intermixed; they accumulate:
-a same as -t a, select named characters
-b same as -t oC, select octal bytes
-c same as -t c, select ASCII characters or backslash escapes
-d same as -t u2, select unsigned decimal shorts
-f same as -t fF, select floats
-h same as -t x2, select hexadecimal shorts
-i same as -t d2, select decimal shorts
-l same as -t d4, select decimal longs
-o same as -t o2, select octal shorts
-x same as -t x2, select hexadecimal shorts
For older syntax (second call format), OFFSET means -j OFFSET. LABEL
is the pseudo-address at first byte printed, incremented when dump is
progressing. For OFFSET and LABEL, a 0x or 0X prefix indicates
hexadecimal, suffixes may be . for octal and b for multiply by 512.
TYPE is made up of one or more of these specifications:
a named character
c ASCII character or backslash escape
d[SIZE] signed decimal, SIZE bytes per integer
f[SIZE] floating point, SIZE bytes per integer
o[SIZE] octal, SIZE bytes per integer
u[SIZE] unsigned decimal, SIZE bytes per integer
x[SIZE] hexadecimal, SIZE bytes per integer
SIZE is a number. For TYPE in doux, SIZE may also be C for
sizeof(char), S for sizeof(short), I for sizeof(int) or L for
sizeof(long). If TYPE is f, SIZE may also be F for sizeof(float), D
for sizeof(double) or L for sizeof(long double).
RADIX is d for decimal, o for octal, x for hexadecimal or n for none.
BYTES is hexadecimal with 0x or 0X prefix, it is multiplied by 512
with b suffix, by 1024 with k and by 1048576 with m. Adding a z suffix to
any type adds a display of printable characters to the end of each line
of output. --string without a number implies 3. --width without a number
implies 32. By default, od uses -A o -t d2 -w 16.
Report bugs to <bug-textutils@gnu.org>.
NAS> md5sum --help
Usage: md5sum [OPTION] [FILE]...
or: md5sum [OPTION] --check [FILE]
Print or check MD5 (128-bit) checksums.
With no FILE, or when FILE is -, read standard input.
-b, --binary read files in binary mode (default on DOS/Windows)
-c, --check check MD5 sums against given list
-t, --text read files in text mode (default)
The following two options are useful only when verifying checksums:
--status don't output anything, status code shows success
-w, --warn warn about improperly formated checksum lines
--help display this help and exit
--version output version information and exit
The sums are computed as described in RFC 1321. When checking, the input
should be a former output of this program. The default mode is to print
a line with checksum, a character indicating type (`*' for binary, ` ' for
text), and name for each FILE.
Report bugs to <bug-textutils@gnu.org>.
NAS> bash busyXtremMerge -vn 2.pdf.001.xtm
*** Vérification d'existence du premier fichier source...
*** Premier fichier source trouvé : 2.pdf.001.xtm
*** Vérification d'existence du dernier fichier source...
*** Dernier fichier source trouvé: 2.pdf.015.xtm
*** Tailles premier et dernier fichier cohérentes.
*** Détermination de l'emplacement du résultat...
od: invalid option -- S
Try `od --help' for more information.
*** Emplacement du résultat :
*** Vérification de la possibilité d'écrire le résultat : existence, autorisation d'écriture, espace disponible, etc...
*** Espace disponible : 4124410723328, sur /volume1
*** 0 fichiers déjà traités.
*** Vérifications pour le fichier résultat terminées.
Traitement optimisé des 15 fichiers
==================================
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.001.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.002.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.003.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.004.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.005.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.006.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.007.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.008.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.009.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.010.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.011.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.012.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.013.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.014.xtm ... OK
od: invalid option -- S
Try `od --help' for more information.
Traitement de 2.pdf.015.xtm ... OK
rm: /volume1/DATA/Incoming/Torrent/1: is a directory
==================================================
Toutes les opérations sont terminées avec succès !
Hors ligne
#83 Le 18/05/2011, à 18:11
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Haha, on tient le bon bout !
En réalité sur Busybox ils se sont trompés parce que la documentation de od est fausse !.. (Je vais peut-être me fendre d'un rapport tiens)
L'option pour les strings est -S (avec S majuscule) alors que le help dit -s (avec s minuscule). Mais le -s (minuscule) sur le od de GNU semble servir à autre chose. Par contre le man od, donne bien -S pour les strings.
Bref c'est le caca le plus total parce que BusyBox est donc conforme à la documentation (--help), mais pas au comportement de GNU od... vu que celui-ci ne correspond pas à la documentation du --help, mais à celle du man !
De toute façon c'est pas grave, puisque ce sont des chaines de caractères que l'on veut lire, une dd suffit. C'est même mieux puisqu'il n'y a pas de conversion et dd est assez efficace.
En plus de cela, en regardant le code, le même od -S1 était aussi à l'endroit où le calcul du fichier de résultat est fait lorsque tu ne précises pas de fichier résultat. Conclusion, dans ton cas, le fichier de résultat calculé est vide... ce qui est assez moche !..
Alors pendant que tu testais, j'avais en réalité déjà fait la modification, et la voici :
Reprendre le script "standard" ici : celui-là qui est standard pour tout le monde.
Il passe en 1.5.6 à cause de cette petite amélioration (dd au lieu de od) plus une autre de détail où j'ai supprimé l'appel à basename, remplacé par un interne de bash.
Tu peux refaire le test (en laissant les md5) et voir ce que ça donne.
Donc :
bash busyXtremMerge -v 2.pdf.001.xtm
P.S.: pour md5sum a priori c'est parfait, il a tout ce qu'il faut !
[Edit] : rapport de bug déposé, https://bugs.launchpad.net/ubuntu/+sour … bug/784758. Les documentations od --help et man od divergent, c'est donc bien un bug de documentation. Et hélas BusyBox a pris la "mauvaise" documentation... les pauvres !...
Dernière modification par Zakhar (Le 18/05/2011, à 18:37)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#84 Le 18/05/2011, à 18:43
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
NAS> bash busyXtremMerge -v 2.pdf.001.xtm
*** Vérification d'existence du premier fichier source...
*** Premier fichier source trouvé : 2.pdf.001.xtm
*** Vérification d'existence du dernier fichier source...
*** Dernier fichier source trouvé: 2.pdf.015.xtm
*** Tailles premier et dernier fichier cohérentes.
*** Détermination de l'emplacement du résultat...
*** Emplacement du résultat : TX-SR603_FrEs_0426.pdf
*** Vérification de la possibilité d'écrire le résultat : existence, autorisation d'écriture, espace disponible, etc...
*** Espace disponible : 4124399184896, sur /volume1
*** 0 fichiers déjà traités.
*** Vérifications pour le fichier résultat terminées.
Traitement optimisé des 15 fichiers
==================================
Traitement de 2.pdf.001.xtm ... md5sum: /dev/fd/63: No such file or directory
Erreur
Ca avance sûrement !
Hors ligne
#85 Le 18/05/2011, à 18:56
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Ah oui, t'inquiète pas !
En haut de la page 2 tu verras que j'ai "optimisé" en retirant l'utilisation d'un fichier temporaire pour la remplacer par un "process substitution". Ca marche impeccable et c'est propre... mais c'est visiblement ça qui bloque sur la BusyBox.
Alors la solution serait facile, en revenant au fichier temporaire... mais ça me fait soit un truc moche, soit une divergence de script... pas cool.
Pour mieux comprendre ce qu'il se passe, tu peux me le faire ainsi :
bash -vx busyXtremMerge -v 2.pdf.001.xtm
(avec l'option -vx sur bash on a un super debug très bavard !)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#86 Le 18/05/2011, à 19:23
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Voici le résultat (effectivement il est bavard) :
NAS> bash -vx busyXtremMerge -v 2.pdf.001.xtm
#! /bin/bash
# Copyright (C) 2010 Zakhar for ubuntu-fr
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# The text of the GNU General Public License is available at
# http://www.gnu.org/licenses/gpl-2.0.html; if you cannot access it,
# write to the Free Software Foundation, Inc., 51 Franklin Street,
# Fifth Floor, Boston, MA 02110-1301 USA.
#===========================================================
# Fonction :
# ----------
# - Ce script fonctionne avec tuXtremMerge
# - Il vise à remplacer les fonctions qui n'existent pas sur
# Busybox 1.16.1 utilisé sur les Synology 1010+
# - Ce script fonctionne également sur Ubuntu (Lucid)... puisque
# c'est ainsi que je le teste !.. Mais il alourdirait inutilement
# les traitements puisque certaines commandes existantes sont réécrites
# en shell, donc plus lent, sujet à des bugs, etc...
# Par conséquent ça a été séparé expressément.
#
# Usage :
# -------
# SynoXtremMerge Nom_Du_Fichier_NNN.xtm
# (N'importe lequel des fichiers fonctionne : 001 ou autre)
#
# Tested : Début du test sur Synology 1010+, travail non terminé
# ------
#
# Version : Syno + version du script tuXtremMerge utilisé
# -------
#
# Date : 2011-04-29
# -----
#
# Author : Zakhar (ubuntu-fr)
# ------
#
# Contributor : // Ajouter votre nom si vous contribuez et redistribuez //
# -----------
# stadros83 @ ubuntu.fr : début des tests Synology 1010+
# - problèmes readlink sur Synology 1010+ (pas d'option -f)
# => retrait de readlink et remplacement par une fonction shell
# - problème od (commande inexistante)
# => Installation par une commande Syno : ipkg install textutils
# - problème du -B (option inexistante)
# => Supression de "du". En réalité pour homogénéiser, on utilise
# stat -c%s partout
# - problème stat -c (option inexistante)
# => Attente de commande pour debug
#
# History :
# ---------
# 0.9.0
# - readlink ne se comporte pas pareil sur Synology 1010+
# - Retrait de readlink, remplacé par la fonction shell readlnk
#==========================================================
# Messages and Error codes.
#+ This way it is easyier, if somebody would like to localise
readonly MSG_BUSY_VERSION="busyXtremMerge (turbo XTM), contournements pour Busybox, version 0.9.0"
+ 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'
#==========================================================
# Fonctions de remplacement des commandes déficientes !
# Remplace readlink qui n'a pas le même comportement partout
# Par ex. sur Synology 1010+ tournant sous Busybox 1.16.1, l'option -f n'existe pas
# Retourne l'emplacement absolu du fichier en le déréférençant éventuellement
# Readlink est toujours utilisé dans le script principal sous cette forme :
# readlink -f Nom_Fichier
# On ne tient donc compte que tu deuxième argument
readlink()
{
if [ -h "$2" ]; then # C'est un lien symbolique !
temp=$( ls -l "$2" )
target=${temp#* -> }
if [ -h "$target" ]; then # Recursif...
pushd $(dirname "$target") >/dev/null
target=$(readlnk "$target")
popd >/dev/null
fi
else
target="$2"
fi
# Ici la variable "target" vaut soit $2 soit le déréférencement
temp=$(cd $(dirname "$target"); pwd)
if [ "$temp" != '/' ]; then # On rajoute / au dirname, sauf pour root
temp="${temp}/"
fi
echo -n "${temp}${target##*/}"
}
# Remplace stat qui n'a pas le même comportement sur les anciens Busybox
# Par ex. sur Synology 1010+ tournant sous Busybox 1.16.1, l'option -c n'existe pas
# C'est moche, mais on remplace donc par un ls + cut
# On utilise le 2ème paramètre car c'est toujours utilisé stat -c%s fichier
stat()
{
ls -l "$2" | tr -s [:blank:] | cut -d' ' -f 5
}
#==========================================================
# Et on source le script standard
# S'il n'est pas mis dans le même chemin, il faut donc changer la commande
THIS_SCRIPT_DIR=$( dirname $0 )
dirname $0
++ dirname busyXtremMerge
+ THIS_SCRIPT_DIR=.
. "${THIS_SCRIPT_DIR}/tuXtremMerge"
+ . ./tuXtremMerge
#! /bin/bash
# Copyright (C) 2010 Zakhar for ubuntu-fr
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# The text of the GNU General Public License is available at
# http://www.gnu.org/licenses/gpl-2.0.html; if you cannot access it,
# write to the Free Software Foundation, Inc., 51 Franklin Street,
# Fifth Floor, Boston, MA 02110-1301 USA.
#===========================================================
# Fonction :
# ----------
# - Rassemble des fichiers découpés par XtremSplit
# - Vérifie le MD5 s'il est inclus dans les fichiers source
#
# Usage :
# -------
# tuXtremMerge Nom_Du_Fichier_NNN.xtm
# (N'importe lequel des fichiers fonctionne : 001 ou autre)
#
# Tested : Ubuntu Lucid,Karmic
# ------
#
# Version : 1.5.6
# -------
#
# Date : 2011-05-18
# -----
#
# Author : Zakhar (ubuntu-fr)
# ------
#
# Contributor : // Ajouter votre nom si vous contribuez et redistribuez //
# -----------
# Hypnose @ ubuntu.fr : amélioration des spécifications
# Totor @ ubuntu.fr : amélioration et optimisation du code
# Moonface @ ubuntu.fr : témoignage, test et debug de fonctionnement sur Synology DS211j
#
# History :
# ---------
# 1.5.6
# - Remplacement de od par dd lorsqu'on doit lire des chaines.
# - Remplacement de basemane par interne ${var##*/}
# 1.5.5
# - Retour au code 1.5.3. (plus amélioration: suppression de 'du + cut' remplacé par 'stat -c%s')
# et séparation du code non fini pour Synology 1010+
# 1.5.4
# - Tentative du mise au point pour Synology 1010+ qui utilise une Busybox 1.16.1
# 1.5.2
# - Suppression useless cat ! (Totor @ ubuntu.fr)
# - Remplacement du fichier temporaire par un process substitution (Totor @ ubuntu.fr)
# - Isolation des libellés et codes erreur.
# - Nouveaux paramètre : V (Version), t (temps) [et donc désormais n'affiche plus par défaut les temps]
# 1.5.1
# - Sécurité : création du fichier temporaire avec mktemp
# - Amélioration de libellés
# - Ordonnancement plus logique des tests de cohérence initiaux.
# - Optimisations mineures.
# 1.5.0
# - Suppression et fusion des options -o et -a !..
# Le script utilise désormais toujours l'option -o (ce qui est sa plus-value)
# Si un traitement partiel est détecté, il reprend là où ça en était (deuxième plus-value)
# Ces deux options sont donc désormais inutiles car implicites... et cela simplifie le code !
# - Le script fonctionne désormais "à la mode Firefox", c'est à dire que le fichier résultat
# est d'abord écrit dans resultat.part, et celui-ci est renommé à la fin du traitement.
# La fonction de reprise tient compte de ce nouveau fonctionnement, de même que l'option -f
# - Le premier fichier bénéficie aussi de l'optimisation (parallelisme copie/md5)
# 1.2.0
# - Suppression de l'option -s devenue inutile. Le fichier est maintenant mis par défaut (suggestion Hypnose @ ubuntu-fr)
# dans le même répertoire que les fichiers source (xtm). Le mode par défaut précédent s'obtient en spécifiant "."
# (c'est à dire le répertoire courant) comme destination.
# - Rajout des options d'optimisation -a et -o
# -a permet de lancer le script en cours de téléchargement et d'obtenir un résultat partiel
# -o optimise les MD5/concaténation via un tee (tout est fait en une seule commande, une seule lecture).
# - Diverses corrections de bugs
# 1.1.0
# - Rajout de l'exploration des arguments
# - Rajout des options : voir description dans la fonction usage
# - Un peu de couleurs pour égayer l'affichage !
# 1.0.1
# - Correction du chemin si le script est lancé depuis via PATH (exemple script placé dans /usr/local/bin)
# - Affichage des fichiers tels que passés en paramètres avec leurs éventuels chemins relatifs/absolus
# 1.0.0
# - Supporte d'être lancé avec des noms de fichiers contenant des chemins
# - Deuxième paramètre optionnel pour spécifier le fichier destination
# - Support des noms de fichiers contenant des espaces (source et destination)
# - Vérification au préalable de l'existence du fichier destination pour éviter les écrasement intempestifs
# - Vérification avant de calculer les MD5 qu'on va bien pouvoir écrire sur le fichier destination
#==========================================================
# Messages and Error codes.
#+ This way it is easyier, if somebody would like to localise
readonly MSG_ERROR="\E[1;31mErreur\E[0m\n"
++ 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"
++ readonly 'MSG_OK=\E[1;32mOK\E[0m'
++ MSG_OK='\E[1;32mOK\E[0m'
readonly MSG_ATTENTION="\E[1;33mAttention !\E[0m"
++ readonly 'MSG_ATTENTION=\E[1;33mAttention !\E[0m'
++ MSG_ATTENTION='\E[1;33mAttention !\E[0m'
readonly MSG_BAD_OPTION="Option - incorrecte"
++ readonly 'MSG_BAD_OPTION=Option - incorrecte'
++ MSG_BAD_OPTION='Option - incorrecte'
readonly MSG_TOO_MANY_PARAMS="Trop de paramètre :"
++ readonly 'MSG_TOO_MANY_PARAMS=Trop de paramètre :'
++ MSG_TOO_MANY_PARAMS='Trop de paramètre :'
readonly MSG_UNKNOWN_OPTION="Option inconnue :"
++ readonly 'MSG_UNKNOWN_OPTION=Option inconnue :'
++ MSG_UNKNOWN_OPTION='Option inconnue :'
readonly MSG_UNSPECIFIED_SOURCE_FILE="Fichier source non spécifié"
++ 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.6"
++ readonly 'MSG_VERSION=tuXtremMerge (turbo XTM), version 1.5.6'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.5.6'
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."
++ 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."
++ 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."
++ 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 ... "
++ readonly 'MSG_CHECKING=Vérifications ... '
++ MSG_CHECKING='Vérifications ... '
readonly MSG_CHECKING_FIRST_SOURCE_FILE="Vérification d'existence du premier fichier source..."
++ 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"
++ 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"
++ 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"
++ 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é :"
++ 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."
++ 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..."
++ 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"
++ 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"
++ 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."
++ 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."
++ 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."
++ 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..."
++ 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 :"
++ 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..."
++ 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à ."
++ 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"
++ 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."
++ 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."
++ 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"
++ 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"
++ 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"
++ 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."
++ 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"
++ 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"
++ 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."
++ 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"
++ 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"
++ 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="=================================="
++ readonly MSG_SEPARATOR===================================
++ MSG_SEPARATOR===================================
readonly MSG_PROCESSING_FILE="Traitement de %s%3.3u.xtm ... "
++ 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."
++ 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."
++ 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
++ readonly E_BAD_OPTION=65
++ E_BAD_OPTION=65
readonly E_UNKNOWN_OPTION=66
++ readonly E_UNKNOWN_OPTION=66
++ E_UNKNOWN_OPTION=66
readonly E_TOO_MANY_PARAMS=67
++ readonly E_TOO_MANY_PARAMS=67
++ E_TOO_MANY_PARAMS=67
readonly E_UNSPECIFIED_SOURCE_FILE=68
++ readonly E_UNSPECIFIED_SOURCE_FILE=68
++ E_UNSPECIFIED_SOURCE_FILE=68
readonly E_MSG_OPTION_M_AND_N=69
++ readonly E_MSG_OPTION_M_AND_N=69
++ E_MSG_OPTION_M_AND_N=69
readonly E_FIRST_FILE_ERROR=80
++ readonly E_FIRST_FILE_ERROR=80
++ E_FIRST_FILE_ERROR=80
readonly E_LAST_FILE_ERROR=81
++ readonly E_LAST_FILE_ERROR=81
++ E_LAST_FILE_ERROR=81
readonly E_FILE_SIZES_ERROR=82
++ readonly E_FILE_SIZES_ERROR=82
++ E_FILE_SIZES_ERROR=82
readonly E_WRITE_ERROR=83
++ readonly E_WRITE_ERROR=83
++ E_WRITE_ERROR=83
readonly E_INSUFFICIENT_SPACE=83
++ readonly E_INSUFFICIENT_SPACE=83
++ E_INSUFFICIENT_SPACE=83
readonly E_INCOHERENT_PARTIAL_FILE=84
++ readonly E_INCOHERENT_PARTIAL_FILE=84
++ E_INCOHERENT_PARTIAL_FILE=84
readonly E_WARN_OVERWRITE=96
++ readonly E_WARN_OVERWRITE=96
++ E_WARN_OVERWRITE=96
readonly E_CRITICAL_ERROR=127
++ readonly E_CRITICAL_ERROR=127
++ E_CRITICAL_ERROR=127
#==========================================================
# Utility functions
# usage : affiche l'usage/aide du script
# v_echo : affichage pour l'option verbeux
usage()
{
if [ -n "$1" ]; then echo "$1"; fi
cat <<EOF
Usage : tuXtremMerge [Options] Source [Destination]
Source : le fichier source, généralement de la forme [chemin/]fichier.001.xtm
On peut cependant indiquer n'importe lequel des xtm de la série, par
exemple fichier.007.xtm
Destination : nom du fichier destination souhaité.
Si la destination est un répertoire existant, le fichier résultat sera
stocké dans ce répertoire, avec le nom indiqué au découpage en xtm.
Par défaut, le fichier résultat est stocké dans le répertoire du
fichier source et porte le nom indiqué lors du découpage en xtm.
Options :
-h Affiche le présent message d'aide.
-n Ne vérifie pas les md5 (concaténation sans vérifier).
-m Vérifie seulement les md5 (pas de concaténation)
-f Force l'écriture du fichier résultat.
Si un fichier existe déjà il est écrasé.
-v Verbeux. Permet aussi de diagnostiquer les incohérences entre options.
-t Temps. Affiche les heures de début et fin de traitement.
Doublé (tt) affiche davantage de temps intermédiaires.
-V Affiche la version du script.
ASTUCE :
Dans tous les cas, le premier et le dernier fichier sont nécessaires pour
que le script puisse au moins commencer à assembler. S'il s'agit de fichiers
téléchargés, veillez donc à récupérer ces deux fichiers en priorité.
EOF
}
v_echo()
{
if [ $OPTION_v ]; then echo -e "*** $1"; fi
}
#______________________________
# Function that scan parameters
# It works with style: -a -v
# but also BSD style : -av
scan_parameters()
{
for param in "$@"
do
case "$param" in
-* )
if [ "$param" == "-" ]; then
usage "$MSG_BAD_OPTION"
exit $E_BAD_OPTION
fi
i=1
while [ $i -lt ${#param} ]
do
case ${param:$i:1} in
h )
usage
exit 0
;;
m )
OPTION_m='1'
;;
n )
OPTION_n='1'
;;
f )
OPTION_f='1'
;;
t )
if [ ${param:$i:2} = 'tt' ]; then
OPTION_t='2'
i=$(( $i + 1 ))
else
OPTION_t='1'
fi
;;
v )
OPTION_v='1'
;;
V )
if [ -n "$MSG_BUSY_VERSION" ]; then
echo "$MSG_BUSY_VERSION"
fi
echo "$MSG_VERSION"
exit 0
;;
* )
usage "$MSG_UNKNOWN_OPTION -${param:$i:1}"
exit $E_UNKNOWN_OPTION
;;
esac
i=$(( $i + 1 ))
done
;;
*)
if [ -z "$DISPLAY_SOURCE_FILE_NAME" ]; then
DISPLAY_SOURCE_FILE_NAME="$param"
elif [ -z "$DISPLAY_DEST_FILE_NAME" ]; then
DISPLAY_DEST_FILE_NAME="$param"
else
usage "$MSG_TOO_MANY_PARAMS $param"
exit $E_TOO_MANY_PARAMS
fi
;;
esac
done
if [ -z "$DISPLAY_SOURCE_FILE_NAME" ]; then
usage "$MSG_UNSPECIFIED_SOURCE_FILE"
exit $E_UNSPECIFIED_SOURCE_FILE
else
SOURCE_FILE_NAME=$( readlink -f "$DISPLAY_SOURCE_FILE_NAME" )
fi
}
#_________________________________
# Functions that check parameters
# and give some warnings or errors
# if things are not correct
check_parameters()
{
if [ $OPTION_m ]; then
if [ $OPTION_n ]; then
echo -e "$MSG_ERROR$MSG_OPTION_M_AND_N"
exit $E_MSG_OPTION_M_AND_N
fi
if [ $OPTION_f ]; then
v_echo "$MSG_IGNORING_OPTION_F"
fi
if [ -n "$DISPLAY_DEST_FILE_NAME" ]; then
v_echo "$MSG_IGNORING_DEST"
fi
fi
}
success()
{
if [ ! $OPTION_m ]; then
# If we mv directly it appears that system syncs, and so the script appears to run longer
#+ When we rm the file first, the async write continues after the script ends.
rm "$DEST_FILE_NAME"
mv "$DEST_FILE_NAME_PART" "$DEST_FILE_NAME"
fi
echo -e "$MSG_SUCCESS"
timing 1
exit 0
}
tip()
{
echo -e "$MSG_TIP"
exit $1
}
nop()
{
cat - >/dev/null
}
timing()
{
if [ $OPTION_t -ge $1 ]; then date +%T.%N; fi
}
#==========================================================
# START OF THE MAIN PROGRAM HERE !
# /TODO
# -> Traiter les interruptions (Ctrl-C) et erreurs par un truncate (au lieu de supprimer)
#_________________________________________
# Variables declaration and initialisation
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
++ 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_m=
OPTION_n=''
++ OPTION_n=
OPTION_f=''
++ OPTION_f=
OPTION_v=''
++ OPTION_v=
declare -i OPTION_t=0
++ declare -i OPTION_t=0
DISPLAY_SOURCE_FILE_NAME=''
++ DISPLAY_SOURCE_FILE_NAME=
DISPLAY_DEST_FILE_NAME=''
++ DISPLAY_DEST_FILE_NAME=
CHUNKS_AVAIL=0
++ CHUNKS_AVAIL=0
scan_parameters "$@"
++ scan_parameters -v 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 ']'
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=2.pdf.001.xtm
++ '[' -z 2.pdf.001.xtm ']'
readlink -f "$DISPLAY_SOURCE_FILE_NAME"
+++ readlink -f 2.pdf.001.xtm
+++ '[' -h 2.pdf.001.xtm ']'
+++ target=2.pdf.001.xtm
cd $(dirname "$target"); pwd
dirname "$target"
+++++ 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
++ timing 1
++ '[' 0 -ge 1 ']'
if [ ! $OPTION_v ]; then
echo -n "$MSG_CHECKING"
fi
++ '[' '!' 1 ']'
check_parameters
++ check_parameters
++ '[' ']'
#==========================================================
# Checking file existence
# - On commence par vérifier le 001 qui contient le header
v_echo "$MSG_CHECKING_FIRST_SOURCE_FILE"
++ 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...
RADIX=$( echo "$SOURCE_FILE_NAME" | sed 's/...\.xtm$//' )
echo "$SOURCE_FILE_NAME" | sed 's/...\.xtm$//'
+++ echo /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ RADIX=/volume1/DATA/Incoming/Torrent/1/2.pdf.
DISPLAY_RADIX=$( echo "$DISPLAY_SOURCE_FILE_NAME" | sed 's/...\.xtm$//' )
echo "$DISPLAY_SOURCE_FILE_NAME" | sed 's/...\.xtm$//'
+++ echo 2.pdf.001.xtm
+++ sed 's/...\.xtm$//'
++ DISPLAY_RADIX=2.pdf.
FIRST_SOURCE_FILE_NAME="${RADIX}001.xtm"
++ FIRST_SOURCE_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
if [ ! -f "$FIRST_SOURCE_FILE_NAME" ] || [ ! -s "$FIRST_SOURCE_FILE_NAME" ]; then
echo -e "$MSG_ERROR$DISPLAY_RADIX$MSG_FIRST_FILE_ERROR"
tip $E_FIRST_FILE_ERROR
else
v_echo "$MSG_FIRST_FILE_FOUND ${DISPLAY_RADIX}001.xtm"
fi
++ '[' '!' -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
fMD5=$( od -An -vtu1 -j91 -N1 "$FIRST_SOURCE_FILE_NAME" )
od -An -vtu1 -j91 -N1 "$FIRST_SOURCE_FILE_NAME"
+++ od -An -vtu1 -j91 -N1 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ fMD5=' 1'
#==========================================================
# Checking if MD5 is included in that xtm
# If not and only a MD5 check is asked (option -m) exit with message
if [ $fMD5 -eq 0 ] && [ $OPTION_m ]; then
echo -e "$MSG_OPTION_M_AND_NO_MD5"
exit 0
fi
++ '[' 1 -eq 0 ']'
CHUNK_SIZE=$(( $( stat -c%s "$FIRST_SOURCE_FILE_NAME" ) - 104 ))
stat -c%s "$FIRST_SOURCE_FILE_NAME"
+++ 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
SOURCE_FILE_NB=$( od -An -vtu4 -j92 -N4 "$FIRST_SOURCE_FILE_NAME" )
od -An -vtu4 -j92 -N4 "$FIRST_SOURCE_FILE_NAME"
+++ od -An -vtu4 -j92 -N4 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ SOURCE_FILE_NB=' 15'
DEST_FILE_SIZE=$( od -An -vtu8 -j96 -N8 "$FIRST_SOURCE_FILE_NAME" )
od -An -vtu8 -j96 -N8 "$FIRST_SOURCE_FILE_NAME"
+++ od -An -vtu8 -j96 -N8 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEST_FILE_SIZE=' 13289755'
#---------------------------------
# - On vérifie le dernier fichier
# => Dans le cas de MD5, celui-ci contient les MD5
# => Dans le cas non-MD5, cela sert à vérifier au moins la cohérence de taille des fichiers
v_echo "$MSG_CHECKING_LAST_SOURCE_FILE"
++ 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...
LAST_SOURCE_FILE_NAME=$( printf "${RADIX}%3.3u.xtm" $SOURCE_FILE_NB )
printf "${RADIX}%3.3u.xtm" $SOURCE_FILE_NB
+++ 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
if [ ! -f "$LAST_SOURCE_FILE_NAME" ] || [ ! -s "$LAST_SOURCE_FILE_NAME" ]; then
printf "$MSG_ERROR$MSG_LAST_FILE_ERROR" "$DISPLAY_RADIX" $SOURCE_FILE_NB
tip $E_LAST_FILE_ERROR
else
v_echo "$( printf "$MSG_LAST_FILE_FOUND" "$DISPLAY_RADIX" $SOURCE_FILE_NB )"
fi
++ '[' '!' -f /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
++ '[' '!' -s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm ']'
printf "$MSG_LAST_FILE_FOUND" "$DISPLAY_RADIX" $SOURCE_FILE_NB
+++ 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
LAST_SOURCE_FILE_SIZE=$(( $( stat -c%s "$LAST_SOURCE_FILE_NAME" ) - $fMD5 * $SOURCE_FILE_NB * 32 ))
stat -c%s "$LAST_SOURCE_FILE_NAME"
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ ls -l /volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
+++ tr -s '[:blank:]'
+++ cut '-d ' -f 5
++ LAST_SOURCE_FILE_SIZE=885979
if [ $(( $CHUNK_SIZE * ($SOURCE_FILE_NB - 1) + $LAST_SOURCE_FILE_SIZE )) -eq $DEST_FILE_SIZE ]; then
v_echo "$MSG_FILE_SIZES_OK"
else
echo -e "$MSG_ERROR$MSG_FILE_SIZES_ERROR"
tip $E_FILE_SIZES_ERROR
fi
++ '[' 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.
#==========================================================
# From here we have first and last file, we can do something!
# Checking output file
# - Vérifie qu'on ne va pas écraser un fichier (si option -f, juste message verbeux)
# - Vérifie qu'on peut bien écrire le fichier (autorisation, nom/chemin correct)
# - Vérifie qu'on a la place d'écrire le fichier
#
# Mais on commence par déterminer le nom du fichier résultat
# Ca dépend de plusieurs choses :
# - si un fichier destination a été spécifié en paramètre
# + et si c'est le cas, si c'est un répertoire existant ou pas
if [ $OPTION_m ]; then
v_echo "$MSG_NO_FILE_WRITTEN"
else
v_echo "$MSG_COMPUTING_DEST"
if [ -z "$DISPLAY_DEST_FILE_NAME" ] || [ -d "$DISPLAY_DEST_FILE_NAME" ]; then
DEST_FILE_NAME_LENGTH=$( od -An -vtu1 -j40 -N1 "$FIRST_SOURCE_FILE_NAME" )
DEFAULT_DEST_FILE_NAME=$( dd bs=1 skip=41 count=$DEST_FILE_NAME_LENGTH if="$FIRST_SOURCE_FILE_NAME" 2>/dev/null)
if [ -z "$DISPLAY_DEST_FILE_NAME" ]; then
this_file_radix=${DISPLAY_SOURCE_FILE_NAME%${DISPLAY_SOURCE_FILE_NAME##*/}}
else # Ici DISPLAY_DEST_FILE_NAME est forcément un répertoire
# on rajoute le / final si nécessaire
if [ ${DISPLAY_DEST_FILE_NAME:(-1)} == '/' ]; then
this_file_radix="$DISPLAY_DEST_FILE_NAME"
else
this_file_radix="$DISPLAY_DEST_FILE_NAME/"
fi
fi
DISPLAY_DEST_FILE_NAME="$this_file_radix$DEFAULT_DEST_FILE_NAME"
fi
v_echo "$MSG_DISPLAY_DEST $DISPLAY_DEST_FILE_NAME"
DEST_FILE_NAME=$( readlink -fn "$DISPLAY_DEST_FILE_NAME" )
DEST_FILE_NAME_PART="${DEST_FILE_NAME}.part"
#---------------------------------
# Vérifications de la possibilité d'écrire le fichier résultat
v_echo "$MSG_CHECK_DEST_WRITABLE"
if [ -f "$DEST_FILE_NAME" ] && [ -s "$DEST_FILE_NAME" ]; then
if [ $OPTION_f ]; then
v_echo "$MSG_ATTENTION$MSG_WARN_FORCED_OVERWRITE"
else
size=$( stat -c%s "$DEST_FILE_NAME" )
if [ $size -eq $DEST_FILE_SIZE ]; then
printf "$MSG_ATTENTION$MSG_WARN_OVERWRITE" $DISPLAY_DEST_FILE_NAME
echo "$MSG_FILE_SIZE_MATCHES"
else
printf "$MSG_ERROR$MSG_WARN_OVERWRITE" $DISPLAY_DEST_FILE_NAME
echo "$MSG_FILE_SIZE_DOES_NOT_MATCH"
fi
echo -e "$MSG_OVERWRITE_HINT"
exit $E_WARN_OVERWRITE
fi
fi
touch "$DEST_FILE_NAME" "$DEST_FILE_NAME_PART" 2>/dev/null
if [ $? -ne 0 ]; then
printf "$MSG_ERROR$MSG_WRITE_ERROR" $DISPLAY_DEST_FILE_NAME
exit $E_WRITE_ERROR
fi
TMP=$( df "$DEST_FILE_NAME" | sed -n '2p' )
SPACE_AVAIL=$(( $( echo $TMP | cut -d' ' -f 4 ) * 1024 - 1024))
v_echo "Espace disponible : $SPACE_AVAIL, sur $( echo $TMP | cut -d' ' -f 6 )"
size=$( stat -c%s "$DEST_FILE_NAME_PART" )
DISK_SPACE_NEEDED=$(( $DEST_FILE_SIZE - $size ))
if [ $DISK_SPACE_NEEDED == 0 ]; then
success
fi
if [ $SPACE_AVAIL -lt $DISK_SPACE_NEEDED ]; then
printf "$MSG_ERROR$MSG_INSUFFICIENT_SPACE" $( echo $TMP | cut -d' ' -f 6 ) "$DISPLAY_DEST_FILE_NAME" $DISK_SPACE_NEEDED $SPACE_AVAIL
exit $E_INSUFFICIENT_SPACE
fi
CHUNKS_AVAIL=$(( $size / $CHUNK_SIZE ))
if [ $(( $size % $CHUNK_SIZE )) -eq 0 ]; then
v_echo "$CHUNKS_AVAIL $MSG_CHUNKS_AVAIL"
else
if [ $OPTION_f ]; then
v_echo "$MSG_INFO_DELETED_OLD_FILE"
rm "$DEST_FILE_NAME_PART" 2>/dev/null
CHUNKS_AVAIL=0
else
printf "$MSG_ERROR$MSG_INCOHERENT_PARTIAL_FILE" $DISPLAY_DEST_FILE_NAME
exit $E_INCOHERENT_PARTIAL_FILE
fi
fi
v_echo "$MSG_ALL_CHECKED_OK"
fi
++ '[' ']'
++ 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 "$FIRST_SOURCE_FILE_NAME"
+++ od -An -vtu1 -j40 -N1 /volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEST_FILE_NAME_LENGTH=' 22'
dd bs=1 skip=41 count=$DEST_FILE_NAME_LENGTH if="$FIRST_SOURCE_FILE_NAME" 2>/dev/null
+++ dd bs=1 skip=41 count=22 if=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEFAULT_DEST_FILE_NAME=TX-SR603_FrEs_0426.pdf
++ '[' -z '' ']'
++ this_file_radix=
++ DISPLAY_DEST_FILE_NAME=TX-SR603_FrEs_0426.pdf
++ v_echo 'Emplacement du résultat : TX-SR603_FrEs_0426.pdf'
++ '[' 1 ']'
++ echo -e '*** Emplacement du résultat : TX-SR603_FrEs_0426.pdf'
*** Emplacement du résultat : TX-SR603_FrEs_0426.pdf
readlink -fn "$DISPLAY_DEST_FILE_NAME"
+++ readlink -fn TX-SR603_FrEs_0426.pdf
+++ '[' -h TX-SR603_FrEs_0426.pdf ']'
+++ target=TX-SR603_FrEs_0426.pdf
cd $(dirname "$target"); pwd
dirname "$target"
+++++ dirname TX-SR603_FrEs_0426.pdf
++++ 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/TX-SR603_FrEs_0426.pdf
++ DEST_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf
++ DEST_FILE_NAME_PART=/volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.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/TX-SR603_FrEs_0426.pdf ']'
++ touch /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
++ '[' 0 -ne 0 ']'
df "$DEST_FILE_NAME" | sed -n '2p'
+++ df /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf
+++ sed -n 2p
++ TMP='/dev/vg1/lv 5749954288 1722118308 4027733580 30% /volume1'
echo $TMP | cut -d' ' -f 4
+++ echo /dev/vg1/lv 5749954288 1722118308 4027733580 30% /volume1
+++ cut '-d ' -f 4
++ SPACE_AVAIL=4124399184896
echo $TMP | cut -d' ' -f 6
+++ echo /dev/vg1/lv 5749954288 1722118308 4027733580 30% /volume1
+++ cut '-d ' -f 6
++ v_echo 'Espace disponible : 4124399184896, sur /volume1'
++ '[' 1 ']'
++ echo -e '*** Espace disponible : 4124399184896, sur /volume1'
*** Espace disponible : 4124399184896, sur /volume1
stat -c%s "$DEST_FILE_NAME_PART"
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
+++ ls -l /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
+++ tr -s '[:blank:]'
+++ cut '-d ' -f 5
++ size=0
++ DISK_SPACE_NEEDED=13289755
++ '[' 13289755 == 0 ']'
++ '[' 4124399184896 -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.
#==========================================================
# The Real work starts here!
# - Toutes les vérifications et préparations étant finies on commence
# la concaténation/checksum à proprement parler
if [ $OPTION_m ]; then
DEST_FILE_NAME_PART="/dev/null"
fi
++ '[' ']'
if [ $fMD5 -eq 0 ] || [ $OPTION_n ]; then
MD5_PROG="nop"
else
MD5_PROG="md5sum"
fi
++ '[' 1 -eq 0 ']'
++ '[' ']'
++ MD5_PROG=md5sum
if [ ! $OPTION_v ]; then
echo -e "$MSG_OK"
fi
++ '[' '!' 1 ']'
timing 1
++ timing 1
++ '[' 0 -ge 1 ']'
if [ $CHUNKS_AVAIL -eq 0 ]; then
printf "$MSG_PROCESSING_START" $SOURCE_FILE_NB
else
printf "$MSG_PROCESSING_RESTART" $(( $CHUNKS_AVAIL + 1 )) $(( $SOURCE_FILE_NB - $CHUNKS_AVAIL ))
fi
++ '[' 0 -eq 0 ']'
++ printf '\E[1mTraitement optimisé des %u fichiers\E[0m\n' 15
Traitement optimisé des 15 fichiers
echo "$MSG_SEPARATOR"
++ echo ==================================
==================================
i=$CHUNKS_AVAIL
++ i=0
while (( $i < $SOURCE_FILE_NB )) ; do
if [ $fMD5 -eq 1 ]; then
this_file_MD5=$( dd bs=1 skip=$(( $LAST_SOURCE_FILE_SIZE + $i * 32)) count=32 if="$LAST_SOURCE_FILE_NAME" 2>/dev/null )
fi
i=$(( $i + 1 ))
this_file_radix=$( printf "%s%3.3u" "$RADIX" $i )
printf "$MSG_PROCESSING_FILE" "$DISPLAY_RADIX" $i
case $i in
1 )
# Pour le premier fichier on ne 'tee' pas les 104 premiers octets, mais ils rentrent dans le md5
{ dd if="$this_file_radix.xtm" bs=104 count=1 2>/dev/null &&
dd if="$this_file_radix.xtm" ibs=104 obs=4096 skip=1 2>/dev/null | tee "$DEST_FILE_NAME_PART";
} | $MD5_PROG --status -c <(echo "$this_file_MD5 *-")
;;
$SOURCE_FILE_NB )
# Pour le dernier fichier on enlève les octets de MD5 (ou pas... s'il n'y en a pas !)
dd if="$this_file_radix.xtm" ibs=$LAST_SOURCE_FILE_SIZE obs=4096 count=1 2>/dev/null | \
tee -a "$DEST_FILE_NAME_PART" | \
$MD5_PROG --status -c <(echo "$this_file_MD5 *-")
;;
*)
# On vérifie la cohérence de taille du fichier seulement si ce n'est ni le premier
# ni le dernier, car pour c'est deux fichiers, c'est déjà vérifié avant !
size=$( stat -c%s "$this_file_radix.xtm" 2>/dev/null )
if [ $? -ne 0 ] || [ $size -ne $CHUNK_SIZE ]; then
echo -e "$MSG_ATTENTION"
echo "$MSG_FILE_MISSING"
if [ $OPTION_m ]; then
continue
else
echo "$MSG_FILE_MISSING_TIP"
exit $E_WARN_FILE_MISSING
fi
fi
tee -a "$DEST_FILE_NAME_PART" <"$this_file_radix.xtm" | $MD5_PROG --status -c <(echo "$this_file_MD5 *-")
esac
if [ $? -eq 0 ]; then # No error: all is OK
echo -e "$MSG_OK"
else # Error: it means we get an incorrect MD5, a write error, or other bad things, so here we cancel and abort
echo -e "$MSG_ERROR"
if [ ! $OPTION_m ]; then # But we stop only if no option -m.
# If option -m we continue so that we check ALL the files and not stop on the first error
rm "$DEST_FILE_NAME_PART" "$DEST_FILE_NAME" 2>/dev/null
exit $E_CRITICAL_ERROR
fi
fi
timing 2
done
++ (( 0 < 15 ))
++ '[' 1 -eq 1 ']'
dd bs=1 skip=$(( $LAST_SOURCE_FILE_SIZE + $i * 32)) count=32 if="$LAST_SOURCE_FILE_NAME" 2>/dev/null
+++ dd bs=1 skip=885979 count=32 if=/volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
++ this_file_MD5=85D2DF1F63D3AF9605865820FB082179
++ i=1
printf "%s%3.3u" "$RADIX" $i
+++ 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
echo "$this_file_MD5 *-"
++ md5sum --status -c /dev/fd/63
+++ echo '85D2DF1F63D3AF9605865820FB082179 *-'
md5sum: /dev/fd/63: No such file or directory
++ dd if=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ibs=104 obs=4096 skip=1
++ tee /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
++ '[' 1 -eq 0 ']'
++ echo -e '\E[1;31mErreur\E[0m\n'
Erreur
++ '[' '!' ']'
++ rm /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf
++ exit 127
NAS>
Hors ligne
#87 Le 18/05/2011, à 20:19
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Oui, très bavard... Mais ça ne m'en apprend pas beaucoup plus, je constate bien qu'il fait une erreur à l'endroit du "process substitution". Si ça se trouve BusyBox ne supporte pas le "process substitution", je vais regarder ça sur leur documentation.
....
En effet, il semblerait que Busybox utilise Ash comme shell standard.
Or Wikipedia (mine d'or !) nous apprend :
Comparaison des fonctionnalités des différents shells
... que Ash ne supporte pas les process substitution. Bash ne les supporte que sur les systèmes qui supportent /dev/fd, et très certainement que la Busybox ne doit pas supporter ça vu que c'est inutile dans Ash.
Bash a bien vu ce que tu tentais de faire, et il a branché l'input sur /dev/fd ... mais là... pouf, il te dit que ça n'est pas supporté !
Alors donc, voici qui devrait définitivement (espérons !) corriger, il faut que tu reprennes les 2 scripts de développement :
Le script spécial : celui-là spécial pour Busybox.
Et le script "standard" : celui-là qui est standard pour tout le monde.
Puis tu refais un :
bash busyXtremMerge -v 2.pdf.001.xtm
J'ai essayé de faire "pas trop moche".
Sur la version standard, ça rajoute juste 1 ligne de code qui est une affectation.
Sur la version Busybox, on a un remplacement en faisant un md5sum suivi d'un grep pour vérifier si on trouve bien la signature correcte.
Le "process substitution" est toujours là, mais comme la fonction utilisée dans le cas de BusyBox n'en a pas besoin, ça ne gène pas du tout.
Les deux versions fonctionnent parfaitement sur ma Lucid.
... j'espère juste que Busybox va pas nous faire des farces sur le grep (qui n'était pas utilisé jusque là)... parce là ce serait à manger son chapeau tellement cette commande est partout !..
P.S. : au fait, as-tu pu "réparer" ta version de BusyBox... comme je vois plus de 4To libre sur ton NAS... sauf si tu as pris 2x3To, il est quasi "vide", et tu devrais pouvoir sauvegarder au besoin si tu veux le "reset d'usine". Mais tu as peut-être trouvé un moyen de mettre une bonne version de BusyBox sans reset !
Dernière modification par Zakhar (Le 18/05/2011, à 21:51)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#88 Le 19/05/2011, à 08:08
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Nope pas réussi à remettre Busybox.
J'ai tenté une mise à jour mais ça n'a pas suffit. Je ne sais pas comment remettre du coup la version "d'origine". Et le problème du reset c'est que j'ai peur de tout perdre .
(pour info c'est 5 x 1.5To).
Hors ligne
#89 Le 19/05/2011, à 08:10
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Au temps pour moi... je confondais avec l'autre gars qui l'a fait marcher sur Synology et qui avait un 211j... le tiens c'est un 5 disques !..
Du coup effectivement, tu as déjà pas mal de trucs sauvegardés !..
Bon, et tu me diras quand tu auras pu faire le test avec les dernières modifs du script.
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#90 Le 19/05/2011, à 12:42
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Il faudrait que je me monte un openvpn pour faire ça à distance !
J'essaye de faire ça ce soir .
Hors ligne
#91 Le 19/05/2011, à 19:10
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Alors voici le résultat
NAS> bash busyXtremMerge -v 2.pdf.001.xtm
*** Vérification d'existence du premier fichier source...
*** Premier fichier source trouvé : 2.pdf.001.xtm
*** Vérification d'existence du dernier fichier source...
*** Dernier fichier source trouvé: 2.pdf.015.xtm
*** Tailles premier et dernier fichier cohérentes.
*** Détermination de l'emplacement du résultat...
*** Emplacement du résultat : TX-SR603_FrEs_0426.pdf
*** Vérification de la possibilité d'écrire le résultat : existence, autorisation d'écriture, espace disponible, etc...
*** 0 fichiers déjà traités.
*** Vérifications pour le fichier résultat terminées.
Traitement optimisé des 15 fichiers
==================================
Traitement de 2.pdf.001.xtm ... Erreur
NAS>
:L
NAS> bash -x busyXtremMerge -v 2.pdf.001.xtm
+ 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'
+ MD5_FCT=Busy_
++ 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.6'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.5.6'
++ 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
++ MD5_FCT=Busy_md5sum
++ scan_parameters -v 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 ']'
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=2.pdf.001.xtm
++ '[' -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'
+++ dd bs=1 skip=41 count=22 if=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEFAULT_DEST_FILE_NAME=TX-SR603_FrEs_0426.pdf
++ '[' -z '' ']'
++ this_file_radix=
++ DISPLAY_DEST_FILE_NAME=TX-SR603_FrEs_0426.pdf
++ v_echo 'Emplacement du résultat : TX-SR603_FrEs_0426.pdf'
++ '[' 1 ']'
++ echo -e '*** Emplacement du résultat : TX-SR603_FrEs_0426.pdf'
*** Emplacement du résultat : TX-SR603_FrEs_0426.pdf
+++ readlink -fn TX-SR603_FrEs_0426.pdf
+++ '[' -h TX-SR603_FrEs_0426.pdf ']'
+++ target=TX-SR603_FrEs_0426.pdf
+++++ dirname TX-SR603_FrEs_0426.pdf
++++ 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/TX-SR603_FrEs_0426.pdf
++ DEST_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf
++ DEST_FILE_NAME_PART=/volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.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/TX-SR603_FrEs_0426.pdf ']'
++ touch /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
++ '[' 0 -ne 0 ']'
+++ df /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf
+++ sed -n 2p
++ TMP='/dev/vg1/lv 5749954288 1722729124 4027122764 30% /volume1'
+++ echo /dev/vg1/lv 5749954288 1722729124 4027122764 30% /volume1
+++ cut '-d ' -f 4
++ SPACE_AVAIL=4123773709312
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
+++ ls -l /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
+++ tr -s '[:blank:]'
+++ cut '-d ' -f 5
++ size=0
++ DISK_SPACE_NEEDED=13289755
++ '[' 13289755 == 0 ']'
++ '[' 4123773709312 -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=Busy_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 ']'
+++ dd bs=1 skip=885979 count=32 if=/volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
++ this_file_MD5=85D2DF1F63D3AF9605865820FB082179
++ 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
++ Busy_md5sum --status -c /dev/fd/63
+++ echo '85D2DF1F63D3AF9605865820FB082179 *-'
++ md5sum
+++ echo 85D2DF1F63D3AF9605865820FB082179
++ grep -iq 85D2DF1F63D3AF9605865820FB082179
++ dd if=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ibs=104 obs=4096 skip=1
++ tee /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
++ '[' 1 -eq 0 ']'
++ echo -e '\E[1;31mErreur\E[0m\n'
Erreur
++ '[' '!' ']'
++ rm /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf
++ exit 127
NAS>
Hors ligne
#92 Le 19/05/2011, à 19:29
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Aïe... comme je l'imaginais :
- Soit le grep nous joue des tours,
- Soit le md5 se calcule mal...
Déjà tu peux essayer avec l'option -n pour ne pas calculer les md5.
bash busyXtremMerge -vn 2.pdf.001.xtm
Ca devrait te produire un fichier sans contrôler les md5.
Tu peux comparer ce fichier avec celui obtenu par XtremSplit standard pour voir si le résultat est correct.
En option, soit utiliser un outil Windows de comparaison de ton choix, sinon en commande Linux :
diff -s TX-SR603_FrEs_0426.pdf Fichier_Obtenu_XtremSplit.pdf
Si tout va bien ça dit que les fichiers sont identiques.
Je vais te faire une version de debug pour voir si ce qui déconne c'est le md5sum ou si c'est le grep, parce que là on voit juste qu'il calcule, et que le grep ne trouve pas le bon résultat dans la chaine calculée par md5sum (mais à cause du "pipe" on ne voit pas ce résultat intermédiaire).
Dernière modification par Zakhar (Le 19/05/2011, à 19:31)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#93 Le 19/05/2011, à 20:47
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Alors sans contrôle du md5 ça recolle bien les fichiers mais ce n'est pas bon :
Fichier avec ton script : 11248ko
Fichier avec Xtremsplit : 12979ko
Hors ligne
#94 Le 19/05/2011, à 21:22
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Alors visiblement il manque 2 'blocs'.
Le premier et le dernier ?... Je vais mettre ça aussi dans le debug.
Alors voici le mode debug
Le script spécial : celui-là spécial pour Busybox.
Et le script "standard" : celui-là qui est standard pour tout le monde.
Ca doit te donner un truc comme ça :
$ busyXtremMerge uc4.001.xtm -v tmptmp
*** Vérification d'existence du premier fichier source...
*** Premier fichier source trouvé : uc4.001.xtm
*** Vérification d'existence du dernier fichier source...
*** Dernier fichier source trouvé: uc4.004.xtm
*** Tailles premier et dernier fichier cohérentes.
*** Détermination de l'emplacement du résultat...
*** Emplacement du résultat : tmptmp
*** Vérification de la possibilité d'écrire le résultat : existence, autorisation d'écriture, espace disponible, etc...
*** 0 fichiers déjà traités.
*** Vérifications pour le fichier résultat terminées.
Traitement optimisé des 4 fichiers
==================================
Traitement de uc4.001.xtm ... OK
*** grep 752E320619BF6B451FAB8A00FD3F7F96 752e320619bf6b451fab8a00fd3f7f96 - = 0
*** Size so far at 1 chunks of 157286400 = 157286400
Traitement de uc4.002.xtm ... OK
*** grep 90AD063C3330372F82018D1DF200CAA6 b3fd14277be93604b1080fc8ace8afe7 - = 1
*** Size so far at 2 chunks of 157286400 = 314572800
Traitement de uc4.003.xtm ... OK
*** grep B3FD14277BE93604B1080FC8ACE8AFE7 90ad063c3330372f82018d1df200caa6 - = 1
*** Size so far at 3 chunks of 157286400 = 471859200
Traitement de uc4.004.xtm ... OK
*** grep E8F292E3114AAACE525EE5DFBA5A4E19 e8f292e3114aaace525ee5dfba5a4e19 - = 0
*** Size so far at 4 chunks of 157286400 = 507343008
==================================================
Toutes les opérations sont terminées avec succès !
Le collage se fera que le md5 soit bon ou pas (comme ci-dessus, 0 quand c'est bon, 1 quand c'est pas bon... mais on continue quand même) et ça affiche les tailles intermédiaires.
Et donc pour toi un truc du genre :
bash busyXtremMerge -v 2.pdf.001.xtm
... et on colle le résultat avec les jolis messages intermédiaires.
Dernière modification par Zakhar (Le 19/05/2011, à 21:47)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#95 Le 20/05/2011, à 18:18
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Alors voici les résultats :
NAS> bash busyXtremMerge -v 2.pdf.001.xtm
busyXtremMerge: line 121: mktemp: command not found
*** Vérification d'existence du premier fichier source...
*** Premier fichier source trouvé : 2.pdf.001.xtm
*** Vérification d'existence du dernier fichier source...
*** Dernier fichier source trouvé: 2.pdf.015.xtm
*** Tailles premier et dernier fichier cohérentes.
*** Détermination de l'emplacement du résultat...
*** Emplacement du résultat : TX-SR603_FrEs_0426.pdf
*** Vérification de la possibilité d'écrire le résultat : existence, autorisation d'écriture, espace disponible, etc...
*** 0 fichiers déjà traités.
*** Vérifications pour le fichier résultat terminées.
Traitement optimisé des 15 fichiers
==================================
Traitement de 2.pdf.001.xtm ... busyXtremMerge: line 124: : No such file or directory
grep: : No such file or directory
busyXtremMerge: line 127: : No such file or directory
Erreur
NAS> bash -x busyXtremMerge -v 2.pdf.001.xtm
+ 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'
+ MD5_FCT=Busy_
++ mktemp
busyXtremMerge: line 121: mktemp: command not found
+ DBG_TMP=
++ 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.6'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.5.6'
++ 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
++ MD5_FCT=Busy_md5sum
++ scan_parameters -v 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 ']'
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=2.pdf.001.xtm
++ '[' -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'
+++ dd bs=1 skip=41 count=22 if=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm
++ DEFAULT_DEST_FILE_NAME=TX-SR603_FrEs_0426.pdf
++ '[' -z '' ']'
++ this_file_radix=
++ DISPLAY_DEST_FILE_NAME=TX-SR603_FrEs_0426.pdf
++ v_echo 'Emplacement du résultat : TX-SR603_FrEs_0426.pdf'
++ '[' 1 ']'
++ echo -e '*** Emplacement du résultat : TX-SR603_FrEs_0426.pdf'
*** Emplacement du résultat : TX-SR603_FrEs_0426.pdf
+++ readlink -fn TX-SR603_FrEs_0426.pdf
+++ '[' -h TX-SR603_FrEs_0426.pdf ']'
+++ target=TX-SR603_FrEs_0426.pdf
+++++ dirname TX-SR603_FrEs_0426.pdf
++++ 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/TX-SR603_FrEs_0426.pdf
++ DEST_FILE_NAME=/volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf
++ DEST_FILE_NAME_PART=/volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.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/TX-SR603_FrEs_0426.pdf ']'
++ touch /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
++ '[' 0 -ne 0 ']'
+++ df /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf
+++ sed -n 2p
++ TMP='/dev/vg1/lv 5749954288 1695035644 4054816244 29% /volume1'
+++ echo /dev/vg1/lv 5749954288 1695035644 4054816244 29% /volume1
+++ cut '-d ' -f 4
++ SPACE_AVAIL=4152131832832
+++ stat -c%s /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
+++ ls -l /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ size=0
++ DISK_SPACE_NEEDED=13289755
++ '[' 13289755 == 0 ']'
++ '[' 4152131832832 -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=Busy_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 ']'
+++ dd bs=1 skip=885979 count=32 if=/volume1/DATA/Incoming/Torrent/1/2.pdf.015.xtm
++ this_file_MD5=85D2DF1F63D3AF9605865820FB082179
++ 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
++ Busy_md5sum --status -c /dev/fd/63
++ md5sum
+++ echo '85D2DF1F63D3AF9605865820FB082179 *-'
busyXtremMerge: line 124: : No such file or directory
++ dd if=/volume1/DATA/Incoming/Torrent/1/2.pdf.001.xtm ibs=104 obs=4096 skip=1
+++ echo 85D2DF1F63D3AF9605865820FB082179
++ tee /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part
++ grep -iq 85D2DF1F63D3AF9605865820FB082179 ''
grep: : No such file or directory
++ err=2
+++ echo 85D2DF1F63D3AF9605865820FB082179
+++ cat
++ echo 'grep 85D2DF1F63D3AF9605865820FB082179
Xtremsplit1.1 Úã@TX-SR603_FrEs_0426.pdfÊ = 2'
busyXtremMerge: line 127: : No such file or directory
++ '[' 1 -eq 0 ']'
++ echo -e '\E[1;31mErreur\E[0m\n'
Erreur
++ '[' '!' ']'
++ rm /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf.part /volume1/DATA/Incoming/Torrent/1/TX-SR603_FrEs_0426.pdf
++ exit 127
Hors ligne
#96 Le 20/05/2011, à 18:24
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Pété de rire... mktemp n'existe pas.
Bon ben on va mettre un fichier temporaire "en dur"... qu'à cela ne tienne.
Et voila :
Le script spécial : celui-là spécial pour Busybox.
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#97 Le 20/05/2011, à 18:33
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Et ............
NAS> bash busyXtremMerge -v 2.pdf.001.xtm
*** Vérification d'existence du premier fichier source...
*** Premier fichier source trouvé : 2.pdf.001.xtm
*** Vérification d'existence du dernier fichier source...
*** Dernier fichier source trouvé: 2.pdf.015.xtm
*** Tailles premier et dernier fichier cohérentes.
*** Détermination de l'emplacement du résultat...
*** Emplacement du résultat : TX-SR603_FrEs_0426.pdf
*** Vérification de la possibilité d'écrire le résultat : existence, autorisation d'écriture, espace disponible, etc...
*** 0 fichiers déjà traités.
*** Vérifications pour le fichier résultat terminées.
Traitement optimisé des 15 fichiers
==================================
Traitement de 2.pdf.001.xtm ... OK
*** grep 85D2DF1F63D3AF9605865820FB082179 6b45e10a0c036e6573a344d5c48a6d95 - = 1
*** Size so far at 1 chunks of 885984 = 0
Traitement de 2.pdf.002.xtm ... OK
*** grep D14FDD910D99A0C58A405DE5354CDB10 d14fdd910d99a0c58a405de5354cdb10 - = 0
*** Size so far at 2 chunks of 885984 = 885984
Traitement de 2.pdf.003.xtm ... OK
*** grep CFF35CBA7F82B95C97F9B2E459BFF89E cff35cba7f82b95c97f9b2e459bff89e - = 0
*** Size so far at 3 chunks of 885984 = 1771968
Traitement de 2.pdf.004.xtm ... OK
*** grep E1451754B38A1D0082EF7D7A2B8AB5AE e1451754b38a1d0082ef7d7a2b8ab5ae - = 0
*** Size so far at 4 chunks of 885984 = 2657952
Traitement de 2.pdf.005.xtm ... OK
*** grep D410544942F7F22EB429DF13A8D114B2 d410544942f7f22eb429df13a8d114b2 - = 0
*** Size so far at 5 chunks of 885984 = 3543936
Traitement de 2.pdf.006.xtm ... OK
*** grep 9F55B6DE365EBC80EE6174CCCC824B80 9f55b6de365ebc80ee6174cccc824b80 - = 0
*** Size so far at 6 chunks of 885984 = 4429920
Traitement de 2.pdf.007.xtm ... OK
*** grep 649E4D6194C57D04E1FF49C4370BB47F 649e4d6194c57d04e1ff49c4370bb47f - = 0
*** Size so far at 7 chunks of 885984 = 5315904
Traitement de 2.pdf.008.xtm ... OK
*** grep 68840E6F23DFFEC3361AD56B0A8936A1 68840e6f23dffec3361ad56b0a8936a1 - = 0
*** Size so far at 8 chunks of 885984 = 6201888
Traitement de 2.pdf.009.xtm ... OK
*** grep E93004559C0FA68D4E82079E530F364A e93004559c0fa68d4e82079e530f364a - = 0
*** Size so far at 9 chunks of 885984 = 7087872
Traitement de 2.pdf.010.xtm ... OK
*** grep B42E3C1F3DC12AA7974D815C73CDDDF3 b42e3c1f3dc12aa7974d815c73cdddf3 - = 0
*** Size so far at 10 chunks of 885984 = 7973856
Traitement de 2.pdf.011.xtm ... OK
*** grep 917BF1B1BA39BB3CE5C203B1D7F6E305 917bf1b1ba39bb3ce5c203b1d7f6e305 - = 0
*** Size so far at 11 chunks of 885984 = 8859840
Traitement de 2.pdf.012.xtm ... OK
*** grep B42230D3DC52F005C113941703950AC2 b42230d3dc52f005c113941703950ac2 - = 0
*** Size so far at 12 chunks of 885984 = 9745824
Traitement de 2.pdf.013.xtm ... OK
*** grep E0FB6A456ADA074A7CE611A61F8535E0 e0fb6a456ada074a7ce611a61f8535e0 - = 0
*** Size so far at 13 chunks of 885984 = 10631808
Traitement de 2.pdf.014.xtm ... OK
*** grep 73A34BF1D102A1433A96E63A0BB428F2 73a34bf1d102a1433a96e63a0bb428f2 - = 0
*** Size so far at 14 chunks of 885984 = 11517792
Traitement de 2.pdf.015.xtm ... OK
*** grep E1D280FB3250B9B0A9C221747DDFE9F4 d41d8cd98f00b204e9800998ecf8427e - = 1
*** Size so far at 15 chunks of 885984 = 11517792
==================================================
Toutes les opérations sont terminées avec succès !
NAS>
Mais le fichier ne fonctionne pas !
11248ko au lieu de 12979ko !
Hors ligne
#98 Le 20/05/2011, à 18:40
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Oui oui je sais, mais ça confirme bien ce que je pensais.
Regarde bien, il saute le premier et le dernier fichier.
Traitement de 2.pdf.001.xtm ... OK *** grep 85D2DF1F63D3AF9605865820FB082179 6b45e10a0c036e6573a344d5c48a6d95 - = 1 *** Size so far at 1 chunks of 885984 = 0 (...) Traitement de 2.pdf.014.xtm ... OK *** grep 73A34BF1D102A1433A96E63A0BB428F2 73a34bf1d102a1433a96e63a0bb428f2 - = 0 *** Size so far at 14 chunks of 885984 = 11517792 Traitement de 2.pdf.015.xtm ... OK *** grep E1D280FB3250B9B0A9C221747DDFE9F4 d41d8cd98f00b204e9800998ecf8427e - = 1 *** Size so far at 15 chunks of 885984 = 11517792 ================================================== Toutes les opérations sont terminées avec succès ! NAS>
Comme tu le vois, après le fichier 2.pdf.001.xtm, le résultat du MD5 n'est pas correct (retour 1) et on voit bien que 85D2DF1F63D3AF9605865820FB082179 et 6b45e10a0c036e6573a344d5c48a6d95 sont différents.
Et de plus, il y 0 octets écrits !..
De même pour le dernier fichier, le md5 est incorrect, et il y a 0 octets écrits puisque la taille n'a pas changé par rapport au 14ème.
Et donc je vois tout à fait où chercher, dans le code des 1er et derniers fichiers.
Par ailleurs les fichiers intermédiaires sont tous traités correctement (ce qui est rassurant !).
La piste qui me vient à l'esprit est que dd se comporte mal dans ce cas, ca qui est bizarre puisqu'il marche correctement par ailleurs pour trouver le nom du fichier résultat par défaut.
... bref ça aide car ça confirme où je dois regarder !
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#99 Le 20/05/2011, à 18:41
- stadros83
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Ok, juste pour info j'ai testé avec d'autres XTM et ça fait pareil .
Merci !
Hors ligne
#100 Le 20/05/2011, à 18:43
- Zakhar
Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm
Ouais, le bug est juste et reproductible, ce qui est rassurant !
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne