Jak na adresare v BASH
Marek Kdolský
KdolskyM na seznam.cz
Čtvrtek Duben 15 10:11:49 CEST 2004
Ahoj resil sem to rekurzi
Tenhle prilozeny skript ma zkopirovat adresarovou strukturu. Pokud narazi na
soubor wav tak na nej postvat lame pro konverzi do mp3. Nerikam ze je to
primo genialni reseni, mozna by to slo i jinak, ale je to funkcni.
prvni parametr je zdrojovy adresar, druhy parametr je cilovy adresar.
Marys
===================================================================================
[marys na marysovo FT]$ cat /mnt/usb-storage/tmp/wav2mp3
#!/bin/bash
#
action_wav(){
# echo "$i -> $DST_FILE";
echo "$i -> $DST_FILE";
trap_start;
lame $i $DST_FILE;
trap_stop;
}
action_others(){
echo "$i -> $DST_FILE";
trap_start;
cp "$i" "$DST_FILE";
trap_stop;
}
showdirs()
{
for i in $SRC_DIR_TMP/* ; do
if [ -d "$i" ] ; then
DST_DIR_TMP=${DST_DIR}${i##$SRC_DIR};
if ! [ -d "$DST_DIR_TMP" ] ; then # kontrola existence
adresare v cilovem adresari, pripadne jeho vytvoreni
echo "vytvarim adresar: $DST_DIR_TMP";
mkdir $DST_DIR_TMP;
fi
SRC_DIR_TMP=${i};
showdirs;
else
DST_FILE="${DST_DIR}${i##$SRC_DIR}";
SRC_FILE=$i;
case ${SRC_FILE##*.} in # rozdeleni akci podle pripon
# akce s wav soubory
[Ww][Aa][Vv]) if ! [ -f "$DST_FILE" ]; then action_wav; fi;;
# akce s ostatnimi soubory
* ) if ! [ -f "$DST_FILE" ]; then action_others; fi;;
esac
fi
done
}
end_error(){
rm -f $DST_FILE;
echo "Nestandardni konec, mazu docasne soubory"
exit 1;
}
trap_start(){
trap end_error INT HUP TERM QUIT;
}
trap_stop(){
trap - INT HUP TERM QUIT;
}
# Hlavni program
SRC_DIR=${1:-"/home/marys/Develop"}; # nacteni parametru
DST_DIR=${2:-"/tmp/dst"};
if ! [ -d "$SRC_DIR" ] || ! [ -d "$DST_DIR" ]; then
echo "Neexistuje zdrojovy nebo cilovy adresar";
exit 1;
fi
SRC_DIR_TMP="$SRC_DIR";
showdirs;
exit 0;
Další informace o konferenci Linux