Pack demos.sh

(Różnice między wersjami)
Skocz do: nawigacji, wyszukiwania
(Utworzył nową stronę „=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/m...”)
 
(Opis: po co ja dawalem dwie gwiazdki?)
Linia 7: Linia 7:
  
 
Parametry w konfiguracji, linia po linii (bez komentarzy):
 
Parametry w konfiguracji, linia po linii (bez komentarzy):
**konfiguracja ścieżki w której znajduje się skrypt (WORKDIR)
+
*konfiguracja ścieżki w której znajduje się skrypt (WORKDIR)
**konfiguracja gdzie znajdują się dema do spakowania (SRCDIR)
+
*konfiguracja gdzie znajdują się dema do spakowania (SRCDIR)
**ścieżka gdzie zapisywać dema w formacie (DSTDIR)/rok/miesiac/dzien/  
+
*ścieżka gdzie zapisywać dema w formacie (DSTDIR)/rok/miesiac/dzien/  
**wzorzec rozpoznawania dem, domyślnie hltv*.dem
+
*wzorzec rozpoznawania dem, domyślnie hltv*.dem
**wzorzec rozszerzenia nazwy pliku dem - tego lepiej nie ruszaj
+
*wzorzec rozszerzenia nazwy pliku dem - tego lepiej nie ruszaj
**wybór pakera, domyślnie tar
+
*wybór pakera, domyślnie tar
**opcje pakera, domyślnie dla bzip2
+
*opcje pakera, domyślnie dla bzip2
**rozszerzenie pakowanego dema, domyślnie tar.bz2
+
*rozszerzenie pakowanego dema, domyślnie tar.bz2
**plik tymczasowy do listy plików do spakowania
+
*plik tymczasowy do listy plików do spakowania
**log z wykonanych operacji
+
*log z wykonanych operacji
** ustawienie priorytetu aby nie zamulać procka (NICE)
+
* ustawienie priorytetu aby nie zamulać procka (NICE)
**opcja kasacji starych spakowanych dem DELETE_OLD
+
*opcja kasacji starych spakowanych dem DELETE_OLD
**spakowane dema starsze niż X dni są kasowane (domyślnie 14)
+
*spakowane dema starsze niż X dni są kasowane (domyślnie 14)
  
 
Do [[cron]]a wpisać cos w ten deseń:
 
Do [[cron]]a wpisać cos w ten deseń:

Wersja z 21:23, 3 mar 2010

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