Accueil du site > Codes > bash > filegap

filegap

jeudi 3 février 2011, par arnaud

Ce programme rempli les trous numérique dans un listing de fichier, en faisant un lien symbolique du fichier précédent autant de fois que nécessaire.

#!/bin/bash

# UTILISATION:
# Ce programme rempli les trous numérique dans un listing de fichier, en copiant le fichier précédent autant de fois que nécéssaire.
# ./Filegap dossier_a_traiter

function taille() {
        echo -n $1|wc -m;
}

function entier() {
        num=`echo $1 | sed 's/^0\+//'`;
        if [[ "$num" == '' ]]; then num=0; fi
        echo -n "$num"
}

function chaine() {
        printf "%.${2}d" $1;
}

function pre() {
        echo $1 | sed 's/^\([^0-9]\+\)\([0-9]\+\)\(.\+\)$/\1/';
}

function suf() {
        echo $1 | sed 's/^\([^0-9]\+\)\([0-9]\+\)\(.\+\)$/\3/';
}

function num() {
        echo $1 | sed 's/^\([^0-9]\+\)\([0-9]\+\)\(.\+\)$/\2/';
}

cd $1

nomancien=`ls .|head -n 1`;
numancien=`num $nomancien`;
taillenum=`taille $numancien`;
prefix=`pre $nomancien`;
sufix=`suf $nomancien`;
# int=`entier $numancien`;
# chr=`chaine $int $taillenum`;
# echo $nomancien, $numancien, $taillenum, $prefix, $sufix, $int, $chr ;

for i in `ls .`; do
        num_ici=`num $i`;
        Enum_ici=`entier $num_ici`;
        Enumancien=`entier $numancien`;
#         echo $diff, $Enum_ici, $Enumancien
        diff=$(($Enum_ici - $Enumancien));
        if [[ "$diff" > 1 ]]; then
                nomancien="${prefix}${numancien}${sufix}";
                deb=$((`entier $numancien`+1))
                fin=$((`entier $num_ici`-1))
                for ((j=$deb; j <= $fin ; j=j+1));do
#                         echo cp $nomancien ${prefix}`chaine $j $taillenum`${sufix};
#                         cp $nomancien ${prefix}`chaine $j $taillenum`${sufix};
                        echo ln -s $nomancien ${prefix}`chaine $j $taillenum`${sufix};
                        ln -s $nomancien ${prefix}`chaine $j $taillenum`${sufix};
                done
        fi;
        numancien=$num_ici;
done;

cd -;

# ^(\D+)(\d+)(.+)$
# numancien=$2
# taille=taille(numancien)
# un par un les fichiers triés
#         num = $2
#         si (diff = entier(num) - entier(numancien)) > 1
#                 nomancien = $1 + $numancien + $3
#                 répéter $i pour entier(numancien)+1 à entier(num)-1
#                         cp $nomancien ($1 + chaine($i,taille) + $3)
#         numancien = num

# Fabriquer un dossier de test
# for ((i=0; i <= 50 ; i=i+5));do touch prefix`printf "%.2d" $i`suffix.png;done

# Effacer les fichiers créés
# find . -type l -delete

Documents joints

Répondre à cet article

SPIP | | Plan du site | Suivre la vie du site RSS 2.0 | Site hébergé chez Mutins