Lo scopo dello script e' ricreare un albero ordinato alfabeticamente delle molte directory e file flac che possiedo. L'assunto è che sia i file che le cartelle siano scritti, nelle directory originali, come nomegruppo - nomedisco, e che non ci siano simboli dell'euro € all'interno dei nomi file o cartelle. Poiche' divido i dischi doppi con due sotto cartelle, in questi non ci lascio il "-" (es. cd 1 è ok, cd-1 no). Diciamo che è una specie di pytagfs dei poveri.
#! /bin/bash
function scanfiles {
workdir=$1
filetype=$2
find $workdir -maxdepth 5 -iname "$filetype" -type f | while read file
do
createlink "$file"
done;
}
function createlink {
percorso=$(basename "$1")
if [[ $percorso == *" "-" "* ]]
then
totale=$(( $totale + 1 ))
echo "$totale" "$percorso"
primocar=`expr substr "$percorso" 1 1`
# modifica l'inizio per trovare la cartella base. I gruppi che iniziano con
# lettere li metto tutti assieme sotto "+"
if [[ $primocar == [0-9] ]]
then
primocar="+"
fi
if [ ! -d "$resultdir""$primocar" ]
then
mkdir "$resultdir""$primocar"
fi
#a questo punto ho l'inizio della cartella e questa esiste in resultdir
#l'ideale sarebbe splittare percorso dividendo con " - ", ma sono imbranato :-)
tmpdir=$percorso
tmpdir=${tmpdir/" - "/"€"}
pos1=`expr index "$tmpdir" "€"`
pos2=`expr $pos1 + 3`
pos1=`expr $pos1 - 1`
nomegruppo=`expr substr "$tmpdir" 1 $pos1`
nomedisco=`expr substr "$tmpdir" $pos2 999`
if [ ! -d "$resultdir""$primocar"/"$nomegruppo" ]
then
mkdir "$resultdir""$primocar"/"$nomegruppo"
fi
if [ ! -d "$resultdir""$primocar"/"$nomegruppo"/"$nomedisco" ]
then
cd "$resultdir""$primocar"/"$nomegruppo"
if [ ! -f "$nomedisco" ]; then
ln -s "$1" "$nomedisco"
fi
fi
fi
}
function scanfolders {
find "$1" -maxdepth 5 -iname '*' ! -name ‘.*’ -type d | while read file
do
createlink "$file"
done;
}
function countfolders {
find "$1" -maxdepth 5 -iname '*' ! -name ‘.*’ -type l | {
totale="0"
while read file; do
totale=$(($totale+1))
done;
echo $totale" disks" >> "$resultdir""Discs.here"
}
}
function countfiles {
cd "$1"
totale="0"
totale=`ls -R -L | wc -l`
echo $totale" files" >> "$resultdir""Discs.here"
}
function delcountfile {
if [ -e "$1""Discs.here" ]
then
rm "$1""Discs.here"
fi
}
#cancella le directory vuote alla fine della ricostruzione
function cleardirs {
find "$1" -depth -type d -empty -exec rmdir {} ;
}
#rimuove i link non validi
function scanlinks {
find "$1" -maxdepth 5 -iname '*' ! -name ‘.*’ -type l | while read file
do
if [ ! -e "$file" ]; then
rm -f "$file"
fi
done;
}
resultdir="/home/me/share/"
logfile="/home/me/batch/tmp/crealinks.log"
totale=0
echo "Crealinks. Starting..." > "$logfile"
echo `date` >> "$logfile"
if [ ! -d "$resultdir" ]
then
mkdir $resultdir
fi
scanlinks "$resultdir"
scanfiles "/home/me/hd1/unfiled/" "*.flac"
scanfiles "/home/me/hd1/lossless/" "*.flac"
scanfolders "/home/me/hd1/mp3"
cleardirs "$resultdir"
delcountfile "$resultdir"
countfolders "$resultdir"
countfiles "$resultdir"
cat "$resultdir""Discs.here"
echo "Crealinks. End..." >> "$logfile"
echo `date` >> "$logfile"
exit 0