В сценарии Bash я хотел бы сравнить две даты, и, если одна больше другой, выполнить задачу.
Я сравниваю две даты:
Дата последнего изменения репозитория svn, я получаю такую информацию о дате:
svn info svn://server.com/reponame -r 'HEAD' | grep 'Last Changed Date'
Это дает мне что-то вроде этого:
Last Changed Date: 2011-06-06 22:26:50 -0400 (Mon, 06 Jun 2011)
Затем я нахожу информацию о дате самого последнего файла резервной копии в каталоге, например:
ls -lt --time-style="+%Y-%m-%d %H:%M:%S" | head -n 2 | tail -n 1
(Интересно, есть ли лучший способ сделать это без головы и хвоста выше)
Это дает мне что-то вроде этого:
-rw-r--r-- 1 user1 user1 14 2011-06-09 07:52:50 svn.dump
Что я хотел бы сделать дальше, так это получить дату из первого вывода и сравнить ее со второй датой вывода, и если одна из них больше другой, я сделаю дамп svn. что было бы наиболее подходящим способом сделать это?
Спасибо.
/ bin / date может преобразовывать время в форматы, включая секунды от эпохи.
DATE_1="`svn info svn://server.com/reponame -r 'HEAD' | grep 'Last Changed Date' | grep -E -o \"[0-9]{4}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2}\"`"
DATE_2="`ls -lt --time-style="+%Y-%m-%d %H:%M:%S" | head -n 2 | tail -n 1 | grep -E -o \"[0-9]{4}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2}\"`"
if [ "`date --date \"$DATE_1\" +%s`" -gt "`date --date \"$DATE_2\" +%s`" ]; then
echo "Greater"
else
echo "Less or equal"
fi
## Specify the filename to dump here
_filename = svn.dump
## Grab the mtime of the file and print out in "seconds since Epoch format"
_fileepoch=$(find ${_filename} -printf "%Ts")
## Grab the last changed date of the file and store it in _svndate
_svndate=$(svn info svn://server.com/reponame -r 'HEAD' \
| grep 'Last Changed Date' \
| awk '{print $4, $5, $6}')
## Use date --date with the "%s" format specifier to print seconds since Epoch
## for that date
_svnepoch=$(date --date "${_svndate}" "+%s")
Вы сможете сравнить ${_svnepoch}
и ${_fileepoch}
сейчас
Я бы просто сравнил количество секунд с эпохи ls -lt --time-style="+%s"
. Это хороший показатель, с которым можно сравнивать.
Из man bash
arg1 OP arg2 OP is one of -eq, -ne, -lt, -le, -gt, or -ge. These arithmetic binary operators return true if arg1 is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to arg2, respectively. Arg1 and arg2 may be positive or negative integers.
Достаточно легко сделать.
F1=$(ls -l --time-style='+%s' file1|awk '{ print $6 }')
F2=$(ls -l --time-style='+%s' file2|awk '{ print $6 }')
if [ $F1 -gt $F2 ]; then
echo yay
echo F1: $F1
else
echo nay
echo F2: $F2
fi
Как писали другие, язык сценариев, который действительно придает значение дате, вероятно, лучше подходит для такого рода задач.