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