#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
#! /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 obligeif [ $EUID -eq 0 ]; then
echo "Ce script ne doit pas être exécuter en tant que root" 1>&2
exit
finbr_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