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