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.

#1 Le 13/06/2006, à 18:28

Styx

[Script] Pour les amateurs de scanlations

Bon je viens de finir un petit script en bash que je trouve assez utile... donc si jamais ca peux servir à quelqu'un.

Son effet est très simple, il extrait le contenu des répertoires fils dans le répertoire courant.
De même il les renomme de la façon suivante:

0..01.extention
0..02.extention
0..03.extention
...

J'en ai une certaine utilité lors que je télécharge un scan de manga et que l'équipe qui a pris la peine de le traduire a ranger chaque chapitre dans un dossier particulier.
C'est mieux ranger mais pas très pratique, je prèfère avoir toutes les pages dans un même dossier smile

#! /bin/sh
#
#!!attention l'appel d'une fonction definie localement se fait sous la forme
#nom_fonction arg et entraine la création d'une variable globale appeler
#nomfonction qui contient le retour de la fonction... c'est foireux mais
#glandinisme oblige

if [ $EUID -eq 0 ]; then
    echo "Ce script ne doit pas être exécuter en tant que root" 1>&2
    exit
fi

nbr_entre ()
{
#creer la variable globale nbrentre qui contient le nbr d'entrée
#d'un repertoire passé en argument
   
    nbrentre=0
    local entre=0
    local entre2=0
   
    for entre in *; do
    if [ -d "$entre" ]; then
        cd "$entre"
        for entre2 in *; do
        if [ -f "$entre2" ]; then
            nbrentre=$((nbrentre + 1))
        fi
        done
        cd ../
    fi
    done
}

calcul_zero ()
{
#Ce script calcul le nombre de zero a mettre devant l'identifiant du fichier
#en fonction du nombre d'entre max
#
#$1 -> entrée courante
#$2 -> nbr de chiffre de l'entre courante
#$3 -> nbr de chiffre de l'entre max
#
#ex :
#
#max entrée = 300
#$3=3
#
#entrée courant = 16
#$2=2
#
#on veux donc nommer le fichier 016.extention
#la fonction retourne donc 016
   
    if [ $# != 3 ]; then
    echo "Erreur dans le script calculzero.sh" 1>&2
    echo "Syntaxe : $0 entre_courante nbrchiffre_entre nbrchiffre_max" 1>&2
    exit
    fi
   
    calculzero=$1
    local chiffretmp=$2
   
    while [ $3 != $chiffretmp ]; do
    calculzero="0$calculzero"
    chiffretmp=$((chiffretmp + 1)) 
    done
}

give_nbr ()
{
#Cette fonction renvoie le nombre de chiffres qui compose un nombre
#dans la variable globale givenbr
    if [ $# != 1 ]; then
    echo "Erreur dans le script give_nbr.sh" 1>&2
    echo "Syntaxe : $0 nbr" 1>&2
    exit
    fi
    givenbr=0
    local nbrtmp=$1
    while [ $nbrtmp != 0 ];do
    nbrtmp=$((nbrtmp / 10))
    givenbr=$((givenbr + 1))
    done
}

traitement_rec ()
{
    local entre
    local entretmp
    for entre in *; do
    if [ -f "$entre" ]; then
        $action -f "./$entre" "../$compt2.${entre#*.}.depl"
        compt2=$((compt2 + 1))
    elif [ -d "$entre" ]; then
        cd "$entre"
        traitement_rec
        cd ../
    fi
    done
    for entre in *; do
    if [ "${entre##*.}" == "depl" ]; then
        mv $verbose $force "./$entre" "../$compt2.${entre#*.}"
        compt2=$((compt2 + 1))
    fi
    done
}

main ()
{
    nbr_entre
    give_nbr $nbrentre
    chiffremax=$givenbr
    local entre
    local entre2
    local entre2tmp
    for entre in *; do
    if [ -d "$entre" ]; then
        cd "$entre"
        for entre2 in *; do
        if [ -f "$entre2" ]; then
            give_nbr $compt
            calcul_zero $compt $givenbr $chiffremax
            $action $verbose $force "./$entre2" "../$calculzero.${entre2#*.}"
            compt=$((compt + 1))
        elif [ -d "$entre2" ] && [ $rec -eq 1 ]; then
            cd "$entre2"
            traitement_rec
            cd ../
        fi
        done
        for entre2 in *; do
        if [ "${entre2##*.}" == "depl" ]; then
            entre2tmp="${entre2#*.}"
            give_nbr $compt
            calcul_zero $compt $givenbr $chiffremax
            mv "./$entre2" "../$calculzero.${entre2tmp%.*}"
            compt=$((compt + 1))
        fi
        done
        cd ../
        if [ $erase -eq 1 ]; then
            rm -r "$entre"
        fi    
    fi
    done
   
}

fn_help ()
{
    echo "Usage: exrep"
    echo ""
    echo "Extrait le contenu des répertoires fils du répertoire courant."
    echo "Les fichiers extraient sont renommés en fonction de leur ordre d'extraction"
    echo ""
    echo "  -v, --verbose        signale les déplacements effectués"
    echo "  -c, --confirm        ne demande pas de confirmation"
    echo "  -k, --keep        préserve les fichiers des répertoires fils"
    echo "  -r, --recursive        traitement récurssif des répertoires fils"
    echo "  -e, --erase        écrase les répertoires fils vidés"
}

confirm=0
action="mv"
## La variable compt est définie en globale et sert à compter le nombre de fichier correctement déplacé
compt=1
compt2=1
rec=0
erase=0
OPTIND=0
while getopts ":hvckre-:" opt ; do
    case $opt in
    h)  fn_help
        exit;;
    v) verbose="-v" ;;
    c) confirm=1 ;;
    k) action="cp";;
    r) rec=1;;
    e) erase=1;;
    - ) case $OPTARG in
        help) fn_help
        exit;;
    verbose) verbose="-v" ;;
    confirm) confirm=1 ;;
    keep) action="cp";;
    recursive) rec=1;;
    erase) erase=1;;
    *) echo "option illégale --$OPTARG"
        exit;;
    esac ;;
    ? ) echo "option illégale --$OPTARG"
    exit;;
    esac
done
shift $(($OPTIND - 1))

if [ $confirm -eq 1 ]; then
    main
    exit
fi;

echo ""
echo "Ce script deplacera de nombreux fichier dans $rep"
echo "Exécutez le script $0 ? [o|n]"

read reponse

case $reponse in
    o)main ;;
    O)main ;;
    n)echo "Fin du script"; exit;;
    N)echo "Fin du script"; exit;;
    ?) echo "Reponse érronée, fin du script"
    exit;;
esac

Wala suffit de le mettre dans un dossier qui tombe sous le joug du grand PATH et de lancer "exrep" en ligne de commande.

Hors ligne

#2 Le 13/06/2006, à 20:29

bertrand0

Re : [Script] Pour les amateurs de scanlations

Tu as essayé comix ? Il te permet d'ouvrir directement une archive de scanlation et de visualiser le contenu en diaporama sans avoir à décompresser l'archive à la main.


Ceux qui écrivent comme ils parlent, quoiqu'ils parlent très bien, écrivent mal.
                                                            Buffon, Discours sur le style

Hors ligne

#3 Le 15/06/2006, à 02:27

Jonon

Re : [Script] Pour les amateurs de scanlations

owned


hype_ @ freenode|hyp3 @ twitter | Ceci n'est pas un Blag

Hors ligne

#4 Le 15/06/2006, à 09:35

hells_dark

Re : [Script] Pour les amateurs de scanlations

Ben, je crois que ca va me servir.
J'ai des dossier avec pleins de chtits sous répertoires...pas pratique
Merci donc.


"You caught me at a strange time in my life."
devianArt - site perso

Hors ligne