Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Milan 26. 01. 2014, 15:53:50

Název: Ověření data vytvoření souboru (bash)
Přispěvatel: Milan 26. 01. 2014, 15:53:50
Dobry den,
potrebuju si napsat script ktery mi zkontroluje ze minoul sobotu byl mezi 1:00 az 2:00 vytvorenej soubor. Nedari se mi ale overit ten datum vzniku souboru. Mozna na to jdu uplne spatne. Muzete mi nejak poradit.

Kód: [Vybrat]
PROM="muj_soubor.2014-01-25_01.00.07.log"
-- funkci si to orziznu abych dostat jenom cast s datumem
CREATE_TIME=$PROM
START_TIME=`date +'%Y-%m-%d' -d'last Saturday'`" 01:00:00"
END_TIME=`date +'%Y-%m-%d' -d'last Saturday'`" 02:00:00"

START_TIME=`date --date="$START_TIME" +"%Y-%m-%d %H:%M:%S"`
CREATE_TIME=`date --date="$CREATE_TIME" +"%Y-%m-%d %H:%M:%S"`
END_TIME=`date --date="$END_TIME" +"%Y-%m-%d %H:%M:%S"`

if [ "$CREATE_TIME" > "$START_TIME" ]; then
 echo "ANO"
else
 echo "NE"
fi

if [ "$CREATE_TIME" > "$END_TIME" ]; then
 echo "ANO"
else
 echo "NE"
fi


prvni podminka projde dobre ale druha uz ne. Jak muze byt create_time vetsi nez end_time.
Co delam spatne pri praci s datumem. Nebo existuje nejaka funkce kterou bych mohl pouzit.

Diky za radu.
Název: Re:Ověření data vytvoření souboru (bash)
Přispěvatel: perceptron 26. 01. 2014, 16:32:48
nemam bash po ruke, ale

a) obavam sa, ze v [ ... ] nefunguju operatory <, > (mozno v nejakych novych verziach Bashu), vid `man test`
b) urcite sedia datove typy? CREATE_TIME a START_TIME su cisla?, ak ano, tak funguje -gt a -lt
Název: Re:Ověření data vytvoření souboru (bash)
Přispěvatel: Vojtěch Myslivec 26. 01. 2014, 21:55:20
nemam bash po ruke, ale

a) obavam sa, ze v [ ... ] nefunguju operatory <, > (mozno v nejakych novych verziach Bashu), vid `man test`
b) urcite sedia datove typy? CREATE_TIME a START_TIME su cisla?, ak ano, tak funguje -gt a -lt

Pravda. Operátory <, > se chovají jako přesměrování. Většinou to skončí vždycky úspěchem.


Když už to máš takto, tak je nutné mít pouze čísla -- +'%Y%m%d%H%M%S' (20130126215235). Poté porovnat pomocí -gt, -lt jak píše perceptron.

IMO: Doporučuji používat [[ ... ]] místo [ .. ], tam jsou operátory < > na porovnáni stringu (lexikograficky), dále funguje negace , and, or ... (!, &&, ||)
Název: Re:Ověření data vytvoření souboru (bash)
Přispěvatel: pavele 26. 01. 2014, 22:23:46
Začal bych tak, že si z požadovaných časů udělám čísla, tedy něco jako:
START_TIME=`date +'%Y%m%d' -d 'last Saturday'`"010000"

Co se týče zjištění vzniku souboru, obávám se, že v linuxu není takový příkaz. Existuje:
- atime (access time) – čas posledního přístupu k souboru
- mtime (modification time) - čas poslední modifikace obsahu souboru
- ctime (change time) – čas poslední modifikace informací v inodu

Takže na zjištění poslední modifikace souboru například příkaz:
mtime=$(stat abcdefgh | awk -F "[ - .]" '/^Modify/ {print $2 $3 }'|sed -e s/[-:]//g)


No a pak to porovnat:
[ "$mtime" -ge "$START_TIME" ] && [ "$mtime" -gl "$STOP_TIME" ] && echo "HURRAAAA"
Název: Re:Ověření data vytvoření souboru (bash)
Přispěvatel: aaa158 27. 01. 2014, 09:44:59
man stat:
-c  --format=FORMAT
                   use the specified FORMAT instead of the default; output a newline after each use of FORMAT

%W     time of file birth, seconds since Epoch; 0 if unknown
%X     time of last access, seconds since Epoch
%Y     time of last modification, seconds since Epoch

Perfect ;-)
Název: Re:Ověření data vytvoření souboru (bash)
Přispěvatel: Milan 27. 01. 2014, 10:01:40
Super, diky za rady. Uz to jde.