Pack demos.sh

Od HLDS.pl
Wersja KaszpiR (dyskusja | edycje) z dnia 20:15, 3 mar 2010
(różn.) ← poprzednia wersja | zobacz aktualną wersję (różn.) | następna wersja → (różn.)
Skocz do: nawigacji, wyszukiwania

Opis

Potrzebowałem pakować dema do Deathmatch Classic. Zapomniałem go tu wrzucić.

  • daje możliwość tez automatycznego pakowania i segregowania dem wg daty rok/miesiac/dzien
  • nie pakuje aktualnie nagrywanych dem
  • nie usuwa źle spakowanego dema (np jak sobie dysk zapchasz :) )
  • może usuwać stare spakowane dema, np starsze niż 14 dni

Parametry w konfiguracji, linia po linii (bez komentarzy):

    • konfiguracja ścieżki w której znajduje się skrypt (WORKDIR)
    • konfiguracja gdzie znajdują się dema do spakowania (SRCDIR)
    • ścieżka gdzie zapisywać dema w formacie (DSTDIR)/rok/miesiac/dzien/
    • wzorzec rozpoznawania dem, domyślnie hltv*.dem
    • wzorzec rozszerzenia nazwy pliku dem - tego lepiej nie ruszaj
    • wybór pakera, domyślnie tar
    • opcje pakera, domyślnie dla bzip2
    • rozszerzenie pakowanego dema, domyślnie tar.bz2
    • plik tymczasowy do listy plików do spakowania
    • log z wykonanych operacji
    • ustawienie priorytetu aby nie zamulać procka (NICE)
    • opcja kasacji starych spakowanych dem DELETE_OLD
    • spakowane dema starsze niż X dni są kasowane (domyślnie 14)

Do crona wpisać cos w ten deseń:

20 5 * * * /home/hlds/scripts/pack_demos.sh > /home/hlds/scripts/pack_demos.cron.log 2>&1

Jak włączysz mózg i poczytasz manuala to dostosujesz do dowolnego packera i pakowania dowolnie pojawiających się cyklicznie plików (chociażby log, aczkolwiek tutaj lepiej byłoby pakować logi dniami a nie każde osobno)

Kod

#!/bin/bash
 
# _KaszpiR_ kaszpir@gmail.com
# Script to find and pack HLTV demos
# if you want to change it to something else you must edit awk lines where the year/month/day is extracted from filename
 
# ver 1.1 2009.08.31
# + added option to list directories for deletion older than X days
# + added definiton for the extension files
 
WORKDIR="/home/hlds/scripts"
 
SRCDIR="/home/hlds/hlds/dmc"
DSTDIR="/home/hlds/scripts/demos"
NAMEPATTERN="hltv*.dem"
EXTENSION=".dem"
 
PACKER=`which tar`
PACK_OPT="-Pjcf"
PACK_EXT="tar.bz2"
TMPFILE=".pack.tmp"
LOGFILE="pack.log"
NICE=20         ;# the niceness level, 20 = lowest, do it when cpu is idle , 0 = highest, do it as fast as possible by current user
DELETE_OLD=1    ;#list dirs marked for deletion
OLDER_THAN=14   ; # 14 days
 
date >> $LOGFILE
echo "================"
cd $WORKDIR
 
rm -f $TMPFILE
 
#this is just for checking what the script will do , or debug mode
if [ $1 ]; then
find $SRCDIR -maxdepth 1 -type f -name $NAMEPATTERN -mmin +60 
exit
fi
 
#find all files modifed over hour ago, so we gonna ignore the currently recorded demo
find $SRCDIR -maxdepth 1 -type f -name $NAMEPATTERN -mmin +60 > $TMPFILE
 
OYEAR=""
OMONTH=""
ODAY=""
TOTAL=`wc -l $TMPFILE|awk '{print $1}'`
echo "$TOTAL files."
INCR=0;
for f in `cat $TMPFILE` ; do
    # display enumerator on screen, for better view if the progress is made
    INCR=$((INCR + 1))
    echo "$INCR / $TOTAL"
    # split filename to daytime format, and used to produce subdirectories and pack files into the proper dir
    YEAR=`echo $f | awk -F- '{print substr($2,1,2)}'`
    MONTH=`echo $f | awk -F- '{print substr($2,3,2)}'`
    DAY=`echo $f | awk -F- '{print substr($2,5,2)}'`
    if [ "$DAY" != "$ODAY" ];then
      # detect the day change and make new subdirectory
      FULLDATE="20$YEAR/$MONTH/$DAY"
      mkdir -p $DSTDIR/$FULLDATE
      ODAY=$DAY
    fi
    SUBNAME=`basename $f $EXTENSION`
    # run with lowest priority to avoid cpu usage
    nice -n$NICE $PACKER $PACK_OPT $DSTDIR/$FULLDATE/$SUBNAME.$PACK_EXT $f >> $LOGFILE 2>&1
 
    if [ $? -eq 0 ]; then
        # packing completed, delete the source file
        rm -f $f
    else
        #packing failed, we leave the source file as it was
        echo "ERROR: not deleting $f"
    fi
 
done
 
if [ $DELETE_OLD == "1" ]; then
  echo "Listing old files"
  #            delete days! del dirs  full day  older than                     print it just in case
  # mindepth is REQUIRED otherwise you will delete wrong directories, like whole current year or month
  find $DSTDIR -mindepth 3  -type d  -daystart  -mtime +$OLDER_THAN -print0 | xargs -0 echo
fi
 
echo "================"
Osobiste
Przestrzenie nazw
Warianty
Działania
HLDS.pl - Menu:
Inne
IRC
Inne sekcje:
Znajomi:
Narzędzia