Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#126 Le 22/05/2011, à 10:16

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

@stadros83

Des nouvelles du "bug de documentation"/typo sur le od.
Le responsable de Busybox a répondu à mon rapport en disant que c'était réglé depuis... la 1.3.0 !..
C'est à dire il y 4 ans et demi. big_smile (Décembre 2006)
J'en conclue que les extensions "textutils" que tu as récupérées dans les dépôts pour Synology ont un âge géologique... et c'est bien cohérent avec l'ancienne version de Busybox que ces dépôts contiennent.
Conclusion, ce mécanisme d'extension n'est pas trop à recommander !..

Le mieux est bien sûr de récupérer directement les sources et les compiler... mais c'est sûr, c'est une autre paire de manches. roll

Bon, en l'occurrence ça n'est pas dramatique, on n'a besoin que du od dans les textutils, et il fait ce qu'on lui demande pour le présent script.

Bonne fin de W.E.


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#127 Le 22/05/2011, à 13:27

stadros83

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Merci pour l'info wink.

Hors ligne

#128 Le 25/05/2011, à 22:43

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

25 mai 2011
Version 1.6.1

  • Simplification de la substitution du md5sum pour busybox (nécessite 1.0.1 busyXtremMerge)


"Script compagnon" busyXtremMerge contenant les adaptations pour Busybox
Version 1.0.1

  • au lieu de passer par une variable, on utilise "command" pour invoquer le md5sum qui a été "masqué" par la fonction du même nom.

P.S.: il s'agit d'une optimisation, et non d'un bug, la version précédente (1.6.0/1.0.0) fonctionne parfaitement.


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#129 Le 26/05/2011, à 12:18

stadros83

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Je viens de tester les nouveaux scripts (merci openvpn) :

NAS> bash busyXtremMerge -vftt show.mkv.001.xtm
13:13:13.%N
*** Vérification d'existence du premier fichier source...
*** Premier fichier source trouvé : show.mkv.001.xtm
*** Vérification d'existence du dernier fichier source...
*** Dernier fichier source trouvé: show.mkv.004.xtm
*** Tailles premier et dernier fichier cohérentes.
*** Détermination de l'emplacement du résultat...
*** Emplacement du résultat : [WoM-F] Bienvenue au show spatial HD.mkv
*** 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.
13:13:13.%N
Traitement optimisé des 4 fichiers
==================================
Traitement de show.mkv.001.xtm ...  OK
13:13:41.%N
Traitement de show.mkv.002.xtm ...  OK
13:14:06.%N
Traitement de show.mkv.003.xtm ...  OK
13:14:30.%N
Traitement de show.mkv.004.xtm ...  OK
13:15:24.%N
==================================================
Toutes les opérations sont terminées avec succès !
13:15:24.%N

Environ 2m21 pour 3Go48.

Ca fait du 26Mo/s, c'est largement correct smile.

Hors ligne

#130 Le 26/05/2011, à 18:00

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Merci stadros83.
En réalité, l'amélioration est mineure sur les deux derniers, mais ravi de voir qu'il n'y a pas de regression !

C'est aussi cool de pouvoir faire du OpenVPN sur ton NAS, belle fonction ça.

Enfin, si tu veux une meilleure performance (quel que soit le format d'ailleurs, que ce soit xtm, rar, etc...) le mieux est d'avoir la source et la destination sur 2 disques différents. Ainsi tu n'oblige le disque à des mouvements de tête entre la source et la destination, et tu peux faire des taux de copie/collage XTM plutôt autour de 60/80MBps.

Avec le script, il faut que tu spécifies alors un deuxième paramètre qui est le nom du fichier de destination (ou simplement le répertoire) et bien sûr pointer sur un autre disque.

Ca donne

bash busyXtremMerge -vftt /media/volume1/path/show.mkv.001.xtm /media/volume2/path

Et encore une fois... c'est générique, ça améliore aussi bien un unrar !..
Bien sûr, si tu as mis tes disques en RAID... bah là c'est rapé, puisque tu ne maitrises plus le disque sur lequel ça va écrire (mais tu as d'autres bénéfices, heureusement !)

P.S.: par contre ce qui est bizarre c'est que ton dernier fichier mette toujours autant de temps à se coller, alors qu'a priori le dernier fichier est toujours égal ou plus petit que les autres. Faudra que j'investigue ça à l'occasion, ça ne se produit pas sur GNU/Linux.

Dernière modification par Zakhar (Le 26/05/2011, à 18:02)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#131 Le 28/05/2011, à 17:38

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Bonjour stadros83,

pour tâcher de résoudre le temps énorme que met à se coller ton dernier fichier de l'exemple ci-dessus, je t'ai mis une version bricolée dans le répertoire de développement, c'est ici :
Le script spécial : celui-là spécial pour Busybox.
Et le script "standard" : celui-là qui est standard pour tout le monde.

A l'occasion si tu peux la prendre et me dire si ça améliore les choses avec ton show.mkv

bash busyXtremMerge -vftt show.mkv.001.xtm

Si ça change rien, on mettra ça sur le compte de la bufferisation... en supposant que le NAS est super efficace et utilise TOUTE sa mémoire disponible en buffers de copie. tongue

Si ça améliore je ferai la modification de façon un peu plus "propre" et avec montée de version.
Si ça change rien, reprends le busyXtremMerge du post #2, car celui bricolé est moins stable.
Pour le fichier commun tu peux garder celui là, j'ai juste changé l'ordre des paramètres dans certains dd, donc c'est équivalent.


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#132 Le 31/05/2011, à 18:51

zootroopa

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Bonjour Zakhar,
Je profite de la porte que tu as laissé ouverte aux détenteurs de NAS pour arriver avec mon petit problème de fichiers xtm.
Merci déjà pour ce post, que j'ai suivi avec attention, mais jusque là sans succès, donc.
Alors factuellement ou presque cela donne:
- j'ai un synology ds411+
- je suis profane à très profane quand il s'agit du monde unix
- j'ai téléchargé busyXtremMerge et tuXtremMerge, puis les ai rendu exécutables.
- tuXtremMerge marche très bien sous Ubuntu
- un premier essai sur le DS411+ avec une série de fichiers xtm et tuXtremMerge, donne ceci:

bash-3.2#  ./tuXtremMerge Dante.mkv.001.xtm     
bash: ./tuXtremMerge: /bin/bash: bad interpreter: No such file or directory
bash-3.2#  bash ./tuXtremMerge Dante.mkv.001.xtm
BusyBox v1.16.1 (2011-04-08 10:13:58 CST) multi-call binary.

Usage: readlink FILE

Display the value of a symlink

Vérifications ...  Erreur
Dante.mkv.001.xtm non trouvé, vide ou erreur
Astuce : il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.
Vous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.

- un deuxième essai sur le DS411+ avec la même série de fichiers xtm et busyXtremMerge, donne ceci:

bash-3.2# ./busyXtremMerge Dante.mkv.001.xtm                   
bash: ./busyXtremMerge: /bin/bash: bad interpreter: No such file or directory
bash-3.2# bash ./busyXtremMerge Dante.mkv.001.xtm
Vérifications ...  Erreur
Premier ou dernier fichier de taille incohérente.
Astuce : il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.
Vous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.

- cette série de fichiers a parfaitement été assemblée avec tuXtremMerge sous Ubuntu

Bref, je suis à dispo pour te founir toutes les informations dont tu as besoin, ou effectuer les tests requis pour ton analyse du problème.
Merci encore, et merci d'avance smile

Hors ligne

#133 Le 31/05/2011, à 19:15

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Bonjour zootroopa,

pas de problème je vais te guider.

Mon intuition : ce que je peux imaginer, compte tenu du message d'erreur et du nom du répertoire où tu as lancé la commande, c'est que tu n'as pas installé bash "comme il faut".
Je devine que tu as trouvé des instructions de compilation, le source, et fait la chose. Simplement, soit la compilation n'est pas allé jusqu'au bout (plantage) soit elle n'est pas prévue pour installer complètement.
Si c'est ce dernier cas, ça a dû créer un fichier nommé bash quelque part dans ton répertoire bash-3.2 ou ses sous répertoires.
Il faut que tu trouves ce fichier bash, et que tu le mettes là où il est attendu, c'est à dire dans /bin
Mais en principe, les chaines de compilation/installation finissent par un truc du genre

make install

... qui font précisément ce genre de chose, car il y a peut-être d'autres fichiers à placer au bon endroit, comme des librairies dynamiques.

Donc le test à faire :
- avant tout, vérifier mon hypothèse (bash pas installé où il faut) avec

which bash

Le résultat attendu est ce qu'on a sur Lucid Lynx

$ which bash
/bin/bash

- Si tu as... rien... eh bien c'est que bash n'est pas dans le chemin visible des exécutables.
- Si tu as autre chose... c'est qu'il n'est pas au bon endroit.
- Ensuite, vérifie si la procédure que tu as suivie ne prévoit pas un

make install

que tu aurais sauté.
- si tu l'as bien fait, et que ça n'a rien installé, c'est que la compilation s'est plantée avant... et qu'en réalité tu n'as pas pu générer bash correctement.
- Si cependant tu trouves un bash dans l'arborescence de ton bash-3.2 tu peux essayer de
-1) modifier les fichiers busyXtremMerge et tuXtremMerge en retirant la première ligne qui va chercher /bin/bash
-2) lancer

bash busyXtremMerge Dante.mkv.001.xtm

- Si ca marche avec la commande ci-dessus, tu peux essayer de copier ton bash au bon endroit avec un :

cp bash /bin

(en mode administrateur)


Le mode simple pour installer des paquets sur ton Synology est d'installer ipkg puis de prendre le paquet qui t'intéresse, probablement avec une comment du style

ipkg install bash

C'est expliqué succinctement au post #2 ... mais certainement mieux dans les forums Synology.
Attention... évite d'installer ainsi busybox lui-même, il semble qu'on récupère alors une version plus ancienne !..


Si bash existe et se lance correctement mais tu as des erreurs, pour débugger, il faut que tu me lances les commandes comme l'a fait (de nombreuses fois !) l'ami stadros83, c'est à dire ainsi :

bash -vx busyXtremMerge Dante.mkv.001.xtm -vftt

Les deux options 'v' et 'x' pour bash vont donner un mode verbeux ('v') et afficher ce qui est exécuté ('x')
Les options pour busyXtremMerge vont donner :
-v : mode verbeux
-f : forcer (si le fichier destination existe déjà partiellement)
-tt: affiche tous les temps intermédiaires.

Et tu me mets tout ce que ça te raconte dans une réponse avec balise 'code'

Pour tuXtremMerge c'est normal. Certaines commandes de la busyBox ne sont pas à jour par rapport à GNU//Linux, et il te faut bien busyXtremMerge pour contourner ce dont j'ai besoin.

Tant qu'on y est, tu peux me faire un :

busybox

(Tout seul, sans argument, ça va afficher la version ainsi que les commandes qu'il connait, par exemple sur Lucid Lynx ça donne :

$ busybox 
BusyBox v1.13.3 (Ubuntu 1:1.13.3-1ubuntu11) multi-call binary
Copyright (C) 1998-2008 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]...
   or: function [arguments]...

    BusyBox is a multi-call binary that combines many common Unix
    utilities into a single executable.  Most people will create a
    link to busybox for each function they wish to use and BusyBox
    will act like whatever it was invoked as!

Currently defined functions:
    [, [[, addgroup, adduser, adjtimex, ar, arping, ash, awk,
    basename, brctl, bunzip2, bzcat, bzip2, cal, cat, chgrp,
    chmod, chown, chroot, chvt, clear, cmp, cp, cpio, crond,
    crontab, cut, date, dc, dd, deallocvt, delgroup, deluser,
    df, dirname, dmesg, dos2unix, dpkg, dpkg-deb, du, dumpkmap,
    echo, ed, egrep, eject, env, expand, expr, false, fbset,
    fdflush, fdisk, fgrep, find, fold, free, freeramdisk, fsck.minix,
    ftpget, ftpput, getopt, getty, grep, gunzip, gzip, halt,
    head, hexdump, hostid, hostname, httpd, hwclock, id, ifconfig,
    ifdown, ifup, init, ip, ipcalc, kill, killall, klogd, last,
    length, less, linuxrc, ln, loadfont, loadkmap, logger, login,
    logname, logread, losetup, ls, lzmacat, makedevs, md5sum,
    mdev, mesg, microcom, mkdir, mkfifo, mkfs.minix, mknod,
    mkswap, mktemp, more, mount, mt, mv, nameif, nc, netstat,
    nslookup, od, openvt, passwd, patch, pidof, ping, ping6,
    pivot_root, poweroff, printf, ps, pwd, rdate, readlink,
    realpath, reboot, renice, reset, rm, rmdir, route, rpm,
    rpm2cpio, run-parts, sed, setkeycodes, sh, sha1sum, sleep,
    sort, start-stop-daemon, static-sh, strings, stty, su, sulogin,
    swapoff, swapon, sync, syslogd, tac, tail, tar, tee, telnet,
    telnetd, test, tftp, time, top, touch, tr, traceroute, true,
    tty, udhcpc, umount, uname, uncompress, unexpand, uniq,
    unix2dos, unlzma, unzip, uptime, usleep, uudecode, uuencode,
    vconfig, vi, vlock, watch, watchdog, wc, wget, which, who,
    whoami, xargs, yes, zcat

P.S.: et tu peux te mettre en "suivi" de ce post (au moins jusqu'à ce que j'aie corrigé pour le 411), ça te permettra de voir quand je réponds.

Dernière modification par Zakhar (Le 31/05/2011, à 21:37)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#134 Le 31/05/2011, à 22:51

zootroopa

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Rebonjour Zakhar,
Merci déjà pour ton rapide soutien.
Le "which bash" donne ceci:

DiskStation> which bash
/opt/bin/bash

Il est vrai que j'ai acquis mon NAS il y a très peu de temps, et n'y connaissant pas grand chose, entre l'installation de ipkg puis celle, entre autres, de bash, j'ai probablement pas exactement fait comme il aurait fallu; en dépit de la foultitude de posts que j'ai parcouru pour y parvenir smile

Pour le debugging à proprement parlé, voici ce que cela donne (je me suis permis de rajouter un "." avant le slash, sans quoi cela ne marchait pas)
C'est un peu long... Bonne chance pour le parcours du log

DiskStation> bash -vx ./busyXtremMerge Dante.mkv.001.xtm -vftt
#! /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 DS1010+
#  - 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 :
# -------
#  busyXtremMerge Nom_Du_Fichier_NNN.xtm
#   (N'importe lequel des fichiers fonctionne : 001 ou autre)
#
# Tested : Testé sur Synology DS1010+
# ------
#
# Version : Syno + version du script tuXtremMerge utilisé
# -------
#
# Date : 2011-05-25
# -----
#
# 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)
#            => Remplacé par un ls avec découpage du résultat
#    - problème pas de support du "process substitution"
#            => le md5sum qui se servait de cela est donc remplacé par un
#               md5sum "pipé" avec un grep
#    - problème pas de ibs/obs sur la commande dd
#            => Nouveaux algorithmes avec uniquement des bs dans le programme
#               commun... et en plus c'est (un peu) plus rapide !
#
# History :
# ---------
#  1.0.1
#  - au lieu de passer par une variable, on utilise "command" pour invoquer
#    le md5sum qui a été "masqué" par la fonction du même nom.
#  1.0.0
#  - Nouveaux algorithmes (main script) pour les dd sans ibs/obs
#  - Contournement pour l'inexistence du "process substitution"
#  - Remplacement du stat -c%s par une fonction (ls + tr + cut)
#  - Suppression du (homogénéisation)
#  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 1.0.1"
+ readonly 'MSG_BUSY_VERSION=busyXtremMerge (turbo XTM), contournements pour Busybox, version 1.0.1'
+ MSG_BUSY_VERSION='busyXtremMerge (turbo XTM), contournements pour Busybox, version 1.0.1'

#==========================================================
# 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
}


# md5sum fonctionne correctement... mais pas le "process substitution"
# Or on l'utilise dans la version standard pour éviter d'avoir utiliser 
# des fichiers temporaires. Ici, on remplace ça par un md5sum 
# "classique" suivi d'un grep sur la signature à trouver.

md5sum()
{
  command md5sum | grep -iq "$( echo $this_file_MD5 )"
}

#==========================================================
# 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, Busybox (Synology DS211j, DS1010+)
# ------
#
# Version : 1.6.1
# -------
#
# Date : 2011-05-25
# -----
#
# 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
#  stadros83 @ ubuntu.fr : debug sur Synology DS1010+ (merci pour la patience !)
#                          A partir de là, certaines spécificités Synology (Busybox) sont
#                          dans le script "compagnon" busyXtremMerge
#
# History :
# ---------
#  1.6.1
#  - Simplification de la substitution du md5sum pour busybox (nécessite 1.0.1 busyXtremMerge)
#  1.6.0
#  - Modification de l'algorithme pour le premier fichier afin de le rendre compatible Busybox
#    (pas de ibs/obs sur le dd). Ainsi modifié, c'est également plus rapide sur Linux standard !
#  - Simplification algo sur le dernier fichier (idem ci-dessus).
#  - Rajout de l'option pipefail pour ne pas "masquer" les éventuelles erreurs lors des "pipes"
#    du processus de recollage.
#  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.6.1"
++ readonly 'MSG_VERSION=tuXtremMerge (turbo XTM), version 1.6.1'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.6.1'
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=
declare -i CHUNKS_AVAIL=0
++ declare -i CHUNKS_AVAIL=0


set -o pipefail
++ set -o pipefail

scan_parameters "$@"
++ scan_parameters Dante.mkv.001.xtm -vftt
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=Dante.mkv.001.xtm
++ for param in '"$@"'
++ case "$param" in
++ '[' -vftt == - ']'
++ i=1
++ '[' 1 -lt 5 ']'
++ case ${param:$i:1} in
++ OPTION_v=1
++ i=2
++ '[' 2 -lt 5 ']'
++ case ${param:$i:1} in
++ OPTION_f=1
++ i=3
++ '[' 3 -lt 5 ']'
++ case ${param:$i:1} in
++ '[' tt = tt ']'
++ OPTION_t=2
++ i=4
++ i=5
++ '[' 5 -lt 5 ']'
++ '[' -z Dante.mkv.001.xtm ']'
 readlink -f "$DISPLAY_SOURCE_FILE_NAME" 
+++ readlink -f Dante.mkv.001.xtm
+++ '[' -h Dante.mkv.001.xtm ']'
+++ target=Dante.mkv.001.xtm
cd $(dirname "$target"); pwd
dirname "$target"
+++++ dirname Dante.mkv.001.xtm
++++ cd .
++++ pwd
+++ temp=/volume1/VIDEO/BRRIP/xtm
+++ '[' /volume1/VIDEO/BRRIP/xtm '!=' / ']'
+++ temp=/volume1/VIDEO/BRRIP/xtm/
+++ echo -n /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm

timing 1
++ timing 1
++ '[' 2 -ge 1 ']'
++ date +%T.%N
23:45:43.%N

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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ sed 's/...\.xtm$//'
++ RADIX=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.
DISPLAY_RADIX=$( echo "$DISPLAY_SOURCE_FILE_NAME" | sed 's/...\.xtm$//' )
 echo "$DISPLAY_SOURCE_FILE_NAME" | sed 's/...\.xtm$//' 
+++ echo Dante.mkv.001.xtm
+++ sed 's/...\.xtm$//'
++ DISPLAY_RADIX=Dante.mkv.

FIRST_SOURCE_FILE_NAME="${RADIX}001.xtm"
++ FIRST_SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm ']'
++ '[' '!' -s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm ']'
++ v_echo 'Premier fichier source trouvé : Dante.mkv.001.xtm'
++ '[' 1 ']'
++ echo -e '*** Premier fichier source trouvé : Dante.mkv.001.xtm'
*** Premier fichier source trouvé : Dante.mkv.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/VIDEO/BRRIP/xtm/Dante.mkv.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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ ls -l /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ CHUNK_SIZE=1043333120

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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ SOURCE_FILE_NB='          5'
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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ DEST_FILE_SIZE='            108621594'

#---------------------------------
# - 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/VIDEO/BRRIP/xtm/Dante.mkv.%3.3u.xtm 5
++ LAST_SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.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/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm ']'
++ '[' '!' -s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm ']'
 printf "$MSG_LAST_FILE_FOUND" "$DISPLAY_RADIX" $SOURCE_FILE_NB 
+++ printf 'Dernier fichier source trouvé: %s%3.3u.xtm\n' Dante.mkv. 5
++ v_echo 'Dernier fichier source trouvé: Dante.mkv.005.xtm'
++ '[' 1 ']'
++ echo -e '*** Dernier fichier source trouvé: Dante.mkv.005.xtm'
*** Dernier fichier source trouvé: Dante.mkv.005.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/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
+++ ls -l /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ LAST_SOURCE_FILE_SIZE=230256410

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
++ '[' 4403588890 -eq 108621594 ']'
++ echo -e '\E[1;31mErreur\E[0m\nPremier ou dernier fichier de taille incohérente.'
Erreur
Premier ou dernier fichier de taille incohérente.
++ tip 82
++ echo -e '\E[1;34mAstuce :\E[0;34m il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.\nVous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.\E[0m'
Astuce : il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.
Vous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.
++ exit 82

Encore merci

Edit: voici le résultat pour busybox

DiskStation> busybox
BusyBox v1.16.1 (2011-04-08 10:13:58 CST) multi-call binary.
Copyright (C) 1998-2009 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]...
   or: function [arguments]...

    BusyBox is a multi-call binary that combines many common Unix
    utilities into a single executable.  Most people will create a
    link to busybox for each function they wish to use and BusyBox
    will act like whatever it was invoked as.

Currently defined functions:
    [, [[, ash, awk, basename, blockdev, cat, catv, chgrp, chmod, chown, chroot, clear, cmp, cp, crond, cut, date, dd, df, diff, dirname, dmesg, dnsdomainname, du, echo,
    egrep, env, expr, false, fdisk, fgrep, find, free, freeramdisk, get_key_value, getty, grep, gunzip, gzip, halt, head, hostname, hwclock, id, ifconfig, ifdown, ifup,
    inetd, init, insmod, ip, ipcalc, kill, killall, klogd, linuxrc, ln, logger, login, losetup, ls, lsmod, makedevs, mkdir, mknod, mkswap, modprobe, more, mount, mv,
    netstat, nohup, nslookup, pidof, ping, ping6, poweroff, printf, ps, pwd, readlink, realpath, reboot, renice, reset, rm, rmdir, rmmod, route, run-parts, sed, seq, sh,
    sleep, sort, stat, stty, su, swapoff, swapon, sync, synodd, syslogd, tail, tar, tee, telnet, telnetd, test, time, top, touch, traceroute, traceroute6, true, tty, umount,
    uname, uniq, unxz, uptime, usleep, vi, wc, which, who, whoami, xargs, xz, xzcat, yes, zcat

Dernière modification par zootroopa (Le 31/05/2011, à 22:55)

Hors ligne

#135 Le 31/05/2011, à 23:11

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Ok, c'est la fonction de remplacement de stat -c%s qui merde...

Mais c'est vrai que c'est moins fiable sans le stat -c%s

Alors tu peux faire les 8 commandes suivantes et coller le résultat :

stat --help
stat -c%s Dante.mkv.001.xtm
ls -l Dante.mkv.00?.xtm
ls -l Dante.mkv.001.xtm | tr -s '[:blank:]'
ls -l Dante.mkv.001.xtm | tr -s '[:blank:]' | cut '-d ' -f 5
wc --help
wc -c Dante.mkv.001.xtm
wc -c Dante.mkv.001.xtm | sed 's/^[ ^I]*//;s/\([0-9]*\).*/\1/'

Tu peux bien sûr les faire toutes d'un coup et coller le résultat global :

stat --help
stat -c%s Dante.mkv.001.xtm
ls -l Dante.mkv.00?.xtm
ls -l Dante.mkv.001.xtm | tr -s '[:blank:]'
ls -l Dante.mkv.001.xtm | tr -s '[:blank:]' | cut '-d ' -f 5
wc --help
wc -c Dante.mkv.001.xtm
wc -c Dante.mkv.001.xtm | sed 's/^[ ^I]*//;s/\([0-9]*\).*/\1/'

Et puisque finalement ton bash est bien installé mais dans opt, si tu veux que les scripts marchent sans modification, il te suffit de rajouter un lien symbolique vers ton bash comme ceci :

ln -s /opt/bin/bash /bin/bash

Après ça tu pourras invoquer les scripts "normalement" comme ceci :

./busyXtremMerge toto.001.xtm

En effet, ça va constater que c'est un script, et regarder la première ligne (shebang) pour trouver l'interpréteur à lancer.
... sinon c'est pas bien grave, faudra toujours penser à les invoquer avec bash !

Dernière modification par Zakhar (Le 01/06/2011, à 17:46)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#136 Le 01/06/2011, à 18:04

zootroopa

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Hello Zakhar,

Ci-dessous le résultat des 8 commandes

DiskStation> stat --help
BusyBox v1.16.1 (2011-04-08 10:13:58 CST) multi-call binary.

Usage: stat [OPTIONS] FILE...

Display file (default) or filesystem status

Options:
    -f    Display filesystem status
    -L    Follow links
    -t    Display info in terse form

DiskStation> stat -c%s Dante.mkv.001.xtm
stat: invalid option -- c
BusyBox v1.16.1 (2011-04-08 10:13:58 CST) multi-call binary.

Usage: stat [OPTIONS] FILE...

Display file (default) or filesystem status

Options:
    -f    Display filesystem status
    -L    Follow links
    -t    Display info in terse form

DiskStation> ls -l Dante.mkv.00?.xtm
-rw-rw-rw-    1 admin    users    1043333224 May 28 13:44 Dante.mkv.001.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:12 Dante.mkv.002.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:18 Dante.mkv.003.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:31 Dante.mkv.004.xtm
-rw-rw-rw-    1 admin    users    230256570 May 28 13:57 Dante.mkv.005.xtm
DiskStation> ls -l Dante.mkv.001.xtm | tr -s '[:blank:]'
-rw-rw-rw- 1 admin users 1043333224 May 28 13:44 Dante.mkv.001.xtm
DiskStation> ls -l Dante.mkv.001.xtm | tr -s '[:blank:]' | cut '-d ' -f 5
1043333224
DiskStation> wc --help
Usage: wc [OPTION]... [FILE]...
Print byte, word, and newline counts for each FILE, and a total line if
more than one FILE is specified.  With no FILE, or when FILE is -,
read standard input.
  -c, --bytes            print the byte counts
  -m, --chars            print the character counts
  -l, --lines            print the newline counts
  -L, --max-line-length  print the length of the longest line
  -w, --words            print the word counts
      --help     display this help and exit
      --version  output version information and exit

Report bugs to <bug-textutils@gnu.org>.
DiskStation> wc -c Dante.mkv.001.xtm
1043333224 Dante.mkv.001.xtm
DiskStation> wc -c Dante.mkv.001.xtm | sed 's/^[ ^I]*//;s/\([0-9]*\).*/\1/'
1043333224

Sinon merci pour l'astuce du lien symbolique (c'est cela que l'on appelle un alias?), bash fonctionne maintenant wink  :

DiskStation> ./busyXtremMerge Dante.mkv.001.xtm
Vérifications ...  Erreur
Premier ou dernier fichier de taille incohérente.
Astuce : il faut le premier et le dernier fichier, corrects et complets, pour que le script puisse fonctionner.
Vous pouvez optimiser le résultat en récupérant ces deux fichiers en priorité.
DiskStation> 

Je reste à dispo.

Dernière modification par zootroopa (Le 01/06/2011, à 18:12)

Hors ligne

#137 Le 01/06/2011, à 18:33

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Fichtre non, c'est pas ça !

Le contournement marche très bien. En réalité c'est le calcul de la longueur du résultat qui se fait sur 32 bits au lieu de 64.
Va falloir la jouer malin pour contourner ce truc là !

En effet, la taille totale de ton fichier fait plus de 4Gb et donc "ça dépasse" les 32 bits et ça plante.

Si tu as ça sous la main, peux-tu essayer avec un fichier qui ne fait pas plus de 4GB et voir si ça marche.
Le plus gros test qu'avait fait stradros83 était sur un fichier de 3 et quelques Go et donc ça marchait !

La ligne incriminée :

++ '[' 4403588890 -eq 108621594 ']'

La taille totale du fichier calculée est donc
4 403 588 890
La taille lue par od dans le header est 'seulement' de
   108 621 594

Mais en réalité 4 G = 4 x 1024 x 1024 x 1024 = 4 294 967 296
Et si tu fais
4 294 967 296 + 108 621 594 = 4 403 588 890

ce qui est bien la taille calculée. Donc dans la lecture du header, od n'a pas tenu compte du 1 dans les 32 bits supérieurs qu'on lui demande de lire.

Alors je vais faire un "contournement" de plus hmm

Dernière modification par Zakhar (Le 01/06/2011, à 18:37)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#138 Le 01/06/2011, à 18:43

zootroopa

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Arff... je vais essayer de te trouver un fichier de moins de 4Gb découpé avec xstremsplit.
J'espère que je pourrais te fournir cela ce soir, mais sans trop d'assurance.

Hors ligne

#139 Le 01/06/2011, à 18:44

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Pas grave la patch est déjà en cours, je te mets ça en ligne dans moins d'un quart d'heure. wink

(Ca sera juste un peu "crade" mais ça devrait marcher)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#140 Le 01/06/2011, à 18:53

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Voila, si tu veux bien :

-1) reprendre le script spécial sur le truc de développement : celui-là spécial pour Busybox.
-2) refaire le test avec les options vtt et me mettre le résultat, comme ça :

./busyXtremMerge Dante.mkv.001.xtm -vtt

(tu peux mettre les options avant ou après le nom de fichier, ça l'a pas d'importance)

Le test est concluant sur Ubuntu, avec le contournement ci-dessus, pour un fichier supérieur à 4G, et pas de régression pour ceux qui sont plus petits.

Dernière modification par Zakhar (Le 01/06/2011, à 18:54)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#141 Le 01/06/2011, à 19:20

zootroopa

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Après 6 minutes, je reste sur la ligne de log ci dessous, et pas de fichier temporaire ou définitif dans le répertoire; il faut que j'attende encore un peu?

DiskStation> chmod +x busyXtremMerge
DiskStation> ./busyXtremMerge Dante.mkv.001.xtm -vtt
20:14:22.%N
*** Vérification d'existence du premier fichier source...
*** Premier fichier source trouvé : Dante.mkv.001.xtm
*** Vérification d'existence du dernier fichier source...
*** Dernier fichier source trouvé: Dante.mkv.005.xtm
*** Tailles premier et dernier fichier cohérentes.
*** Détermination de l'emplacement du résultat...

Cela semble en tout cas aller vers le mieux smile

Dernière modification par zootroopa (Le 01/06/2011, à 19:21)

Hors ligne

#142 Le 01/06/2011, à 19:25

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Il doit y avoir une commande qui "plante" et qui attend un input.

Tu peux me le refaire ainsi :

bash -x ./busyXtremMerge Dante.mkv.001.xtm -vtt

Et quand c'est arrêté, tu fais CTRL-C pour "casser" le script et tu me colles les quelques 50 dernières lignes.


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#143 Le 01/06/2011, à 19:27

zootroopa

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Voilà voilà smile

DiskStation> bash -x ./busyXtremMerge Dante.mkv.001.xtm -vtt
+ readonly 'MSG_BUSY_VERSION=busyXtremMerge (turbo XTM), contournements pour Busybox, version 1.0.1'
+ MSG_BUSY_VERSION='busyXtremMerge (turbo XTM), contournements pour Busybox, version 1.0.1'
++ 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.6.1'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.6.1'
++ 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=
++ declare -i CHUNKS_AVAIL=0
++ set -o pipefail
++ scan_parameters Dante.mkv.001.xtm -vtt
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=Dante.mkv.001.xtm
++ for param in '"$@"'
++ case "$param" in
++ '[' -vtt == - ']'
++ i=1
++ '[' 1 -lt 4 ']'
++ case ${param:$i:1} in
++ OPTION_v=1
++ i=2
++ '[' 2 -lt 4 ']'
++ case ${param:$i:1} in
++ '[' tt = tt ']'
++ OPTION_t=2
++ i=3
++ i=4
++ '[' 4 -lt 4 ']'
++ '[' -z Dante.mkv.001.xtm ']'
+++ readlink -f Dante.mkv.001.xtm
+++ '[' -h Dante.mkv.001.xtm ']'
+++ target=Dante.mkv.001.xtm
+++++ dirname Dante.mkv.001.xtm
++++ cd .
++++ pwd
+++ temp=/volume1/VIDEO/BRRIP/xtm
+++ '[' /volume1/VIDEO/BRRIP/xtm '!=' / ']'
+++ temp=/volume1/VIDEO/BRRIP/xtm/
+++ echo -n /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ timing 1
++ '[' 2 -ge 1 ']'
++ date +%T.%N
20:28:02.%N
++ '[' '!' 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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ sed 's/...\.xtm$//'
++ RADIX=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.
+++ echo Dante.mkv.001.xtm
+++ sed 's/...\.xtm$//'
++ DISPLAY_RADIX=Dante.mkv.
++ FIRST_SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ '[' '!' -f /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm ']'
++ '[' '!' -s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm ']'
++ v_echo 'Premier fichier source trouvé : Dante.mkv.001.xtm'
++ '[' 1 ']'
++ echo -e '*** Premier fichier source trouvé : Dante.mkv.001.xtm'
*** Premier fichier source trouvé : Dante.mkv.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu1 = -vtu8 ']'
+++ command od -An -vtu1 -j91 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ fMD5='   1'
++ '[' 1 -eq 0 ']'
+++ stat -c%s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ ls -l /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ CHUNK_SIZE=1043333120
+++ od -An -vtu4 -j92 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu4 = -vtu8 ']'
+++ command od -An -vtu4 -j92 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ od -An -vtu4 -j92 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ SOURCE_FILE_NB='          5'
+++ od -An -vtu8 -j96 -N8 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu8 = -vtu8 ']'
++++ command od -An -vtu4 -j96 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++++ od -An -vtu4 -j96 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ low='  108621594'
++++ command od -An -vtu4 -j100 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++++ od -An -vtu4 -j100 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ high='          1'
+++ echo 4403588890
++ DEST_FILE_SIZE=4403588890
++ 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/VIDEO/BRRIP/xtm/Dante.mkv.%3.3u.xtm 5
++ LAST_SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
++ '[' '!' -f /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm ']'
++ '[' '!' -s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm ']'
+++ printf 'Dernier fichier source trouvé: %s%3.3u.xtm\n' Dante.mkv. 5
++ v_echo 'Dernier fichier source trouvé: Dante.mkv.005.xtm'
++ '[' 1 ']'
++ echo -e '*** Dernier fichier source trouvé: Dante.mkv.005.xtm'
*** Dernier fichier source trouvé: Dante.mkv.005.xtm
+++ stat -c%s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
+++ ls -l /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ LAST_SOURCE_FILE_SIZE=230256410
++ '[' 4403588890 -eq 4403588890 ']'
++ 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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu1 = -vtu8 ']'
+++ command od -An -vtu1 -j40 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ od -An -vtu1 -j40 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ DEST_FILE_NAME_LENGTH='   9'
+++ dd bs=1 skip=41 count=9 if=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm

Hors ligne

#144 Le 01/06/2011, à 20:08

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Ok, je vois. tongue

J'ai fait un contournement du dd qui nécessite que tu utilises aussi le script standard de développement (et pas celui de la première page).

Il est là : celui-là qui est standard pour tout le monde, mais version "développement".

Tu peux donc le re-télécharger et ré-essayer.

Je vais rajouter un test de version entre BusyBox et le script standard dans le truc propre "définitif" pour éviter ça.

./busyXtremMerge Dante.mkv.001.xtm -vtt

? big_smile
(Et si ça marche pas, avec bash -x devant)

Dernière modification par Zakhar (Le 01/06/2011, à 20:23)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#145 Le 01/06/2011, à 20:25

zootroopa

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

bé ça marche pas big_smile
(mode: me tourne honteusement les pouces en attendant que les autres fassent le boulot)

DiskStation> bash -x ./busyXtremMerge Dante.mkv.001.xtm -vtt
+ readonly 'MSG_BUSY_VERSION=busyXtremMerge (turbo XTM), contournements pour Busybox, version 1.0.1'
+ MSG_BUSY_VERSION='busyXtremMerge (turbo XTM), contournements pour Busybox, version 1.0.1'
++ 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.6.1'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.6.1'
++ 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=
++ declare -i CHUNKS_AVAIL=0
++ set -o pipefail
++ scan_parameters Dante.mkv.001.xtm -vtt
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=Dante.mkv.001.xtm
++ for param in '"$@"'
++ case "$param" in
++ '[' -vtt == - ']'
++ i=1
++ '[' 1 -lt 4 ']'
++ case ${param:$i:1} in
++ OPTION_v=1
++ i=2
++ '[' 2 -lt 4 ']'
++ case ${param:$i:1} in
++ '[' tt = tt ']'
++ OPTION_t=2
++ i=3
++ i=4
++ '[' 4 -lt 4 ']'
++ '[' -z Dante.mkv.001.xtm ']'
+++ readlink -f Dante.mkv.001.xtm
+++ '[' -h Dante.mkv.001.xtm ']'
+++ target=Dante.mkv.001.xtm
+++++ dirname Dante.mkv.001.xtm
++++ cd .
++++ pwd
+++ temp=/volume1/VIDEO/BRRIP/xtm
+++ '[' /volume1/VIDEO/BRRIP/xtm '!=' / ']'
+++ temp=/volume1/VIDEO/BRRIP/xtm/
+++ echo -n /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ timing 1
++ '[' 2 -ge 1 ']'
++ date +%T.%N
21:21:54.%N
++ '[' '!' 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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ sed 's/...\.xtm$//'
++ RADIX=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.
+++ echo Dante.mkv.001.xtm
+++ sed 's/...\.xtm$//'
++ DISPLAY_RADIX=Dante.mkv.
++ FIRST_SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ '[' '!' -f /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm ']'
++ '[' '!' -s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm ']'
++ v_echo 'Premier fichier source trouvé : Dante.mkv.001.xtm'
++ '[' 1 ']'
++ echo -e '*** Premier fichier source trouvé : Dante.mkv.001.xtm'
*** Premier fichier source trouvé : Dante.mkv.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu1 = -vtu8 ']'
+++ command od -An -vtu1 -j91 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ fMD5='   1'
++ '[' 1 -eq 0 ']'
+++ stat -c%s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ ls -l /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ CHUNK_SIZE=1043333120
+++ od -An -vtu4 -j92 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu4 = -vtu8 ']'
+++ command od -An -vtu4 -j92 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ od -An -vtu4 -j92 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ SOURCE_FILE_NB='          5'
+++ od -An -vtu8 -j96 -N8 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu8 = -vtu8 ']'
++++ command od -An -vtu4 -j96 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++++ od -An -vtu4 -j96 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ low='  108621594'
++++ command od -An -vtu4 -j100 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++++ od -An -vtu4 -j100 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ high='          1'
+++ echo 4403588890
++ DEST_FILE_SIZE=4403588890
++ 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/VIDEO/BRRIP/xtm/Dante.mkv.%3.3u.xtm 5
++ LAST_SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
++ '[' '!' -f /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm ']'
++ '[' '!' -s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm ']'
+++ printf 'Dernier fichier source trouvé: %s%3.3u.xtm\n' Dante.mkv. 5
++ v_echo 'Dernier fichier source trouvé: Dante.mkv.005.xtm'
++ '[' 1 ']'
++ echo -e '*** Dernier fichier source trouvé: Dante.mkv.005.xtm'
*** Dernier fichier source trouvé: Dante.mkv.005.xtm
+++ stat -c%s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
+++ ls -l /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ LAST_SOURCE_FILE_SIZE=230256410
++ '[' 4403588890 -eq 4403588890 ']'
++ 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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu1 = -vtu8 ']'
+++ command od -An -vtu1 -j40 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ od -An -vtu1 -j40 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ DEST_FILE_NAME_LENGTH='   9'
+++ dd if=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm bs=1 skip=41 count=9
++ DEFAULT_DEST_FILE_NAME=Dante.mkv
++ '[' -z '' ']'
++ this_file_radix=
++ DISPLAY_DEST_FILE_NAME=Dante.mkv
++ v_echo 'Emplacement du résultat : Dante.mkv'
++ '[' 1 ']'
++ echo -e '*** Emplacement du résultat : Dante.mkv'
*** Emplacement du résultat : Dante.mkv
+++ readlink -fn Dante.mkv
+++ '[' -h Dante.mkv ']'
+++ target=Dante.mkv
+++++ dirname Dante.mkv
++++ cd .
++++ pwd
+++ temp=/volume1/VIDEO/BRRIP/xtm
+++ '[' /volume1/VIDEO/BRRIP/xtm '!=' / ']'
+++ temp=/volume1/VIDEO/BRRIP/xtm/
+++ echo -n /volume1/VIDEO/BRRIP/xtm/Dante.mkv
++ DEST_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv
++ DEST_FILE_NAME_PART=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.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/VIDEO/BRRIP/xtm/Dante.mkv ']'
++ '[' -s /volume1/VIDEO/BRRIP/xtm/Dante.mkv ']'
++ touch /volume1/VIDEO/BRRIP/xtm/Dante.mkv /volume1/VIDEO/BRRIP/xtm/Dante.mkv.part
++ '[' 0 -ne 0 ']'
+++ df /volume1/VIDEO/BRRIP/xtm/Dante.mkv
+++ sed -n 2p
++ TMP='/dev/vg1000/lv       2879606320 363781472 2515722448  13% /volume1'
+++ echo /dev/vg1000/lv 2879606320 363781472 2515722448 13% /volume1
+++ cut '-d ' -f 4
++ SPACE_AVAIL=2576099785728
+++ stat -c%s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.part
+++ ls -l /volume1/VIDEO/BRRIP/xtm/Dante.mkv.part
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ size=14379144
++ DISK_SPACE_NEEDED=4389209746
++ '[' 4389209746 == 0 ']'
++ '[' 2576099785728 -lt 4389209746 ']'
++ CHUNKS_AVAIL=0
++ '[' 14379144 -eq 0 ']'
++ '[' ']'
++ printf '\E[1;31mErreur\E[0m\nLa 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' Dante.mkv
Erreur
La taille du fichier partiel n'est pas un multiple de la taille de découpage des fichiers xtm.
Supprimez ce fichier (Dante.mkv.part) ou utilisez l'option -f
++ exit 84
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> 
DiskStation> bash -x ./busyXtremMerge Dante.mkv.001.xtm -vtt
+ readonly 'MSG_BUSY_VERSION=busyXtremMerge (turbo XTM), contournements pour Busybox, version 1.0.1'
+ MSG_BUSY_VERSION='busyXtremMerge (turbo XTM), contournements pour Busybox, version 1.0.1'
++ 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.6.1'
++ MSG_VERSION='tuXtremMerge (turbo XTM), version 1.6.1'
++ 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=
++ declare -i CHUNKS_AVAIL=0
++ set -o pipefail
++ scan_parameters Dante.mkv.001.xtm -vtt
++ for param in '"$@"'
++ case "$param" in
++ '[' -z '' ']'
++ DISPLAY_SOURCE_FILE_NAME=Dante.mkv.001.xtm
++ for param in '"$@"'
++ case "$param" in
++ '[' -vtt == - ']'
++ i=1
++ '[' 1 -lt 4 ']'
++ case ${param:$i:1} in
++ OPTION_v=1
++ i=2
++ '[' 2 -lt 4 ']'
++ case ${param:$i:1} in
++ '[' tt = tt ']'
++ OPTION_t=2
++ i=3
++ i=4
++ '[' 4 -lt 4 ']'
++ '[' -z Dante.mkv.001.xtm ']'
+++ readlink -f Dante.mkv.001.xtm
+++ '[' -h Dante.mkv.001.xtm ']'
+++ target=Dante.mkv.001.xtm
+++++ dirname Dante.mkv.001.xtm
++++ cd .
++++ pwd
+++ temp=/volume1/VIDEO/BRRIP/xtm
+++ '[' /volume1/VIDEO/BRRIP/xtm '!=' / ']'
+++ temp=/volume1/VIDEO/BRRIP/xtm/
+++ echo -n /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ timing 1
++ '[' 2 -ge 1 ']'
++ date +%T.%N
21:22:20.%N
++ '[' '!' 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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ sed 's/...\.xtm$//'
++ RADIX=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.
+++ echo Dante.mkv.001.xtm
+++ sed 's/...\.xtm$//'
++ DISPLAY_RADIX=Dante.mkv.
++ FIRST_SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ '[' '!' -f /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm ']'
++ '[' '!' -s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm ']'
++ v_echo 'Premier fichier source trouvé : Dante.mkv.001.xtm'
++ '[' 1 ']'
++ echo -e '*** Premier fichier source trouvé : Dante.mkv.001.xtm'
*** Premier fichier source trouvé : Dante.mkv.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu1 = -vtu8 ']'
+++ command od -An -vtu1 -j91 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ od -An -vtu1 -j91 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ fMD5='   1'
++ '[' 1 -eq 0 ']'
+++ stat -c%s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ ls -l /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ CHUNK_SIZE=1043333120
+++ od -An -vtu4 -j92 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu4 = -vtu8 ']'
+++ command od -An -vtu4 -j92 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ od -An -vtu4 -j92 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ SOURCE_FILE_NB='          5'
+++ od -An -vtu8 -j96 -N8 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu8 = -vtu8 ']'
++++ command od -An -vtu4 -j96 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++++ od -An -vtu4 -j96 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ low='  108621594'
++++ command od -An -vtu4 -j100 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++++ od -An -vtu4 -j100 -N4 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ high='          1'
+++ echo 4403588890
++ DEST_FILE_SIZE=4403588890
++ 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/VIDEO/BRRIP/xtm/Dante.mkv.%3.3u.xtm 5
++ LAST_SOURCE_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
++ '[' '!' -f /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm ']'
++ '[' '!' -s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm ']'
+++ printf 'Dernier fichier source trouvé: %s%3.3u.xtm\n' Dante.mkv. 5
++ v_echo 'Dernier fichier source trouvé: Dante.mkv.005.xtm'
++ '[' 1 ']'
++ echo -e '*** Dernier fichier source trouvé: Dante.mkv.005.xtm'
*** Dernier fichier source trouvé: Dante.mkv.005.xtm
+++ stat -c%s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
+++ ls -l /volume1/VIDEO/BRRIP/xtm/Dante.mkv.005.xtm
+++ tr -s '[:blank:]'
+++ cut '-d ' -f 5
++ LAST_SOURCE_FILE_SIZE=230256410
++ '[' 4403588890 -eq 4403588890 ']'
++ 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/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ '[' -vtu1 = -vtu8 ']'
+++ command od -An -vtu1 -j40 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
+++ od -An -vtu1 -j40 -N1 /volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm
++ DEST_FILE_NAME_LENGTH='   9'
+++ dd if=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.001.xtm bs=1 skip=41 count=9
++ DEFAULT_DEST_FILE_NAME=Dante.mkv
++ '[' -z '' ']'
++ this_file_radix=
++ DISPLAY_DEST_FILE_NAME=Dante.mkv
++ v_echo 'Emplacement du résultat : Dante.mkv'
++ '[' 1 ']'
++ echo -e '*** Emplacement du résultat : Dante.mkv'
*** Emplacement du résultat : Dante.mkv
+++ readlink -fn Dante.mkv
+++ '[' -h Dante.mkv ']'
+++ target=Dante.mkv
+++++ dirname Dante.mkv
++++ cd .
++++ pwd
+++ temp=/volume1/VIDEO/BRRIP/xtm
+++ '[' /volume1/VIDEO/BRRIP/xtm '!=' / ']'
+++ temp=/volume1/VIDEO/BRRIP/xtm/
+++ echo -n /volume1/VIDEO/BRRIP/xtm/Dante.mkv
++ DEST_FILE_NAME=/volume1/VIDEO/BRRIP/xtm/Dante.mkv
++ DEST_FILE_NAME_PART=/volume1/VIDEO/BRRIP/xtm/Dante.mkv.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/VIDEO/BRRIP/xtm/Dante.mkv ']'
++ touch /volume1/VIDEO/BRRIP/xtm/Dante.mkv /volume1/VIDEO/BRRIP/xtm/Dante.mkv.part
++ '[' 0 -ne 0 ']'
+++ df /volume1/VIDEO/BRRIP/xtm/Dante.mkv
+++ sed -n 2p
++ TMP='/dev/vg1000/lv       2879606320 363787560 2515716360  13% /volume1'
+++ echo /dev/vg1000/lv 2879606320 363787560 2515716360 13% /volume1
+++ cut '-d ' -f 4
++ SPACE_AVAIL=2576093551616
+++ stat -c%s /volume1/VIDEO/BRRIP/xtm/Dante.mkv.part
+++ ls -l /volume1/VIDEO/BRRIP/xtm/Dante.mkv.part
+++ cut '-d ' -f 5
+++ tr -s '[:blank:]'
++ size=14379144
++ DISK_SPACE_NEEDED=4389209746
++ '[' 4389209746 == 0 ']'
++ '[' 2576093551616 -lt 4389209746 ']'
++ CHUNKS_AVAIL=0
++ '[' 14379144 -eq 0 ']'
++ '[' ']'
++ printf '\E[1;31mErreur\E[0m\nLa 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' Dante.mkv
Erreur
La taille du fichier partiel n'est pas un multiple de la taille de découpage des fichiers xtm.
Supprimez ce fichier (Dante.mkv.part) ou utilisez l'option -f
++ exit 84

Est ce que ce message d'erreur peut venir du fait que j'ai d'abord fait la commande sans "bash -x" puis avec?

Supprimez ce fichier (Dante.mkv.part) ou utilisez l'option -f

Hors ligne

#146 Le 01/06/2011, à 20:34

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Si si ça marche en fait !

(Enfin on verra à la fin)

Là il te dit juste que le fichier sur lequel tu essayes de coller existe déjà et qu'il n'a pas une taille qui correspond au fichier qu'on attend.

tuXtremMerge a écrit :

Erreur
La taille du fichier partiel n'est pas un multiple de la taille de découpage des fichiers xtm.
Supprimez ce fichier (Dante.mkv.part) ou utilisez l'option -f

C'est en fait une protection pour éviter que tu écrases un fichier qui n'est pas le bon.

Donc soit tu supprimes avant "à la main" le fichier Dante.mkv.part, comme il te le dit, soit si tu es sûr que c'est bien ça que tu veux faire, tu peux utiliser l'option -f qui écrasera tout sur son passage. tongue
(Je blague, en l'occurrence l'option -f écrasera tout fichier nommé Dante.mkv et Dante.mkv.part dans ton cas)

Et donc là tu peux faire

./busyXtremMerge Dante.mkv.001.xtm -vttf

(j'ai mis le f à la fin des options)
Et pareil, si ça marche pas... regarde avant le message d'erreur si il te donne un indice... et ensuite bash -x devant.

Et tant qu'on y est, tu peux me faire un

od --version

Si ça marche pas

od --help

et tu regardes ce qu'il faut faire pour avoir la version de cet utilitaire dans le texte d'aide.
J'aimerais signaler le "bug", même s'il est probablement déjà corrigé, car les textutils sur les dépôts Synology ont l'air assez anciens !

Dernière modification par Zakhar (Le 01/06/2011, à 20:36)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#147 Le 01/06/2011, à 20:47

zootroopa

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Ça a effectivement l'air de marcher ! Extra!

Le traitement est en cours:

DiskStation> ./busyXtremMerge Dante.mkv.001.xtm -vttf
21:40:02.%N
*** Vérification d'existence du premier fichier source...
*** Premier fichier source trouvé : Dante.mkv.001.xtm
*** Vérification d'existence du dernier fichier source...
*** Dernier fichier source trouvé: Dante.mkv.005.xtm
*** Tailles premier et dernier fichier cohérentes.
*** Détermination de l'emplacement du résultat...
*** Emplacement du résultat : Dante.mkv
*** Vérification de la possibilité d'écrire le résultat : existence, autorisation d'écriture, espace disponible, etc...
*** Fichier partiel incohérent supprimé par option -f
*** Vérifications pour le fichier résultat terminées.
21:40:02.%N
Traitement optimisé des 5 fichiers
==================================
Traitement de Dante.mkv.001.xtm ...  

le fichier .part grossit tranquillement

DiskStation> ls -l
-rwx------    1 root     root             0 Jun  1 21:40 Dante.mkv
-rw-rw-rw-    1 admin    users    1043333224 May 28 13:44 Dante.mkv.001.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:12 Dante.mkv.002.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:18 Dante.mkv.003.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:31 Dante.mkv.004.xtm
-rw-rw-rw-    1 admin    users    230256570 May 28 13:57 Dante.mkv.005.xtm
-rwx------    1 root     root      14742320 Jun  1 21:45 Dante.mkv.part
-rwx--x--x    1 root     root          6195 Jun  1 19:51 busyXtremMerge
-rwx--x--x    1 root     root         24450 May 28 18:26 tuXtremMerge
DiskStation> 
DiskStation> ls -l
-rwx------    1 root     root             0 Jun  1 21:40 Dante.mkv
-rw-rw-rw-    1 admin    users    1043333224 May 28 13:44 Dante.mkv.001.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:12 Dante.mkv.002.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:18 Dante.mkv.003.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:31 Dante.mkv.004.xtm
-rw-rw-rw-    1 admin    users    230256570 May 28 13:57 Dante.mkv.005.xtm
-rwx------    1 root     root      19915882 Jun  1 21:47 Dante.mkv.part

je te fais signe dès que c'est fini smile

ah oui... j'oubliais encore ...
Pour l'od et pour l'info:

DiskStation> od --version
od (textutils) 2.1
Written by Jim Meyering.

Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Dernière modification par zootroopa (Le 01/06/2011, à 20:50)

Hors ligne

#148 Le 01/06/2011, à 20:59

Zakhar

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Si tu peux me mettre la sortie complète quand c'est fini, j'aimerais voir si les temps pour le dernier fichier sont cohérents.

Et merci pour le od, je vais pouvoir poster !


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#149 Le 01/06/2011, à 21:06

zootroopa

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

Mais de rien ! big_smile
Je t'enverrai bien sûr la sortie complète à la fin du traitement.
En revanche, je ne sais pas si cela sera ce soir, quand je regarde la vitesse d'accroissement du fichier part
(début de traitement : 21:40:02 et à 22:05 j'en suis à 64086735/1043333224 du premier fichier)

Dernière modification par zootroopa (Le 01/06/2011, à 21:07)

Hors ligne

#150 Le 01/06/2011, à 21:27

zootroopa

Re : tuXtremMerge (XtremSplit TURBO !) - Recoller vos fichier .xtm

On vient probablement de passer au fichier n°2

DiskStation> ls -l
-rwx------    1 root     root             0 Jun  1 21:40 Dante.mkv
-rw-rw-rw-    1 admin    users    1043333224 May 28 13:44 Dante.mkv.001.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:12 Dante.mkv.002.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:18 Dante.mkv.003.xtm
-rw-rw-rw-    1 admin    users    1043333120 May 28 14:31 Dante.mkv.004.xtm
-rw-rw-rw-    1 admin    users    230256570 May 28 13:57 Dante.mkv.005.xtm
-rwx------    1 root     root     106147870 Jun  1 22:22 Dante.mkv.part
-rwx--x--x    1 root     root          6195 Jun  1 19:51 busyXtremMerge
-rwx--x--x    1 root     root         24450 May 28 18:26 tuXtremMerge

côté log, cela n'a pas bougé (cela affiche toujours Traitement de Dante.mkv.001.xtm ... )
Je pense donc que le log définitif sera plutôt pour demain smile
Quoiqu'il en soit, encore merci pour tout.

Hors ligne