Finalement je cherchais trop compliqué à base de rsync, find, ...
Je me suis limité à ls en fait et voici un premier jet qui "marche" :
C'est mon premier script shell donc si vous voyez des horreurs n’hésitez pas à m'en faire part.
#!/bin/bash
listfile() {
#Sauvegarde de L'Internal Field Separator (Utile ???)
SaveIFS=$IFS
#Seprateur uniquement au saut de page
IFS=$'\n'
#Pour tout les fichiers du répertoire donné en paramètre
for fichier in $(eval ls \"$1\" ); do
#Si c'est un fichier
if [ -f "$1/$fichier" ]; then
#Si le nom du fichier contient '.flac'
if [ ${fichier##*.} == 'flac' ]; then
#Détermination du nom complet du fichier cible
local fileDest=$(replaceStr "$1/$fichier" "FLAC" "OGG" )
local fichier_flac=$1/$fichier
fileDest=$(replaceStr "$fileDest" ".flac" ".ogg" )
#Recherche si fichier cible existant
if [ ! -f "$fileDest" ]; then
echo "Compression de : "$fileDest
#On le compresse
oggenc "$fichier_flac" -q9
#On le met dans le repertoire OGG
fichier_ogg=$(replaceStr "$fichier_flac" ".flac" ".ogg" )
mv "$fichier_ogg" "$fileDest"
fi
elif [ ${fichier##*.} == 'png' ] || [ ${fichier##*.} == 'jpg' ] || [ ${fichier##*.} == 'nfo' ]; then
#Détermination du nom complet du fichier cible
local fileDest=$(replaceStr "$1/$fichier" "FLAC" "OGG" )
local fileSrc=$1/$fichier
#Recherche si fichier cible existant
if [ ! -f "$fileDest" ]; then
echo "Copie de : "$fileDest
#On copie le fichier
mv "$fileSrc" "$fileDest"
fi
fi
#Si c'est un répertoire
elif [ -d "$1/$fichier" ]; then
local rep=$1/$fichier
#Détermination du nom du répertoire cible
local repDest=$(replaceStr "$rep" "FLAC" "OGG" )
#Si inexitant
if [ ! -d "$repDest" ]; then
echo "___KO : "$repDest
#Création du répertoire
eval mkdir \"$repDest\"
fi
#Appel récursif avec ce nouveau répertoire
listfile "$rep"
fi
done
#On réapplique le IFS sauvegardé (Utile ???)
IFS=$SaveIFS
}
replaceStr(){
local cible=$(echo $1 | sed -e "s/$2/$3/" )
echo $cible
}
source=$1
echo $source
listfile "$source" |
Pour ne plus être embête avec les espaces j'ai modifier $IFS, c'est trop grâve ? Ya pas mieux ? La porté de cette modification est-elle restreinte à mon script ou à ton mon shell ? En gros $SaveIFS sert ou pas ?
Pour remplacer une sous-chaine de caractère par une autre il n'y a pas mieux que ? :
replaceStr(){
local cible=$(echo $1 | sed -e "s/$2/$3/" )
echo $cible
} |
Comme prochaine amélioration je ne vais pas compresser les fichiers tout de suite mais les mettre dans un fichier pour les compresser tout à la fin.
Ayant une bonne capacité de calcul (core i7), Je voudrais savoir si il y a un moyen de lancer x script sh en même temps, ainsi je pense faire un truc du genre :
Ajouter les fichiers à compresser dans x fichier à tour de rôle et à la fin lancer ces x fichier en parallèle.
Est-ce faisable ?