2013-03-25 2 views
1

Есть ли способ извлечь последнюю измененную дату и время из файла журнала и прикрепить эту дату и время к файлу?сценарий оболочки для создания нового журнала с отметкой даты

У меня есть инструмент, который генерирует файл appslist.log каждый раз при его запуске. Через мой скрипт, когда я запускаю инструмент, файл applist.log уже существует, и мне, возможно, придется связать его со временем и датой создания.

Как:

mv applist.log applist_+%Y%m%d_%H%M%S.log 

Как скажем, я побежал инструмент на первый раз и он генерировал applist.log:

applist.log  Mon 03-29-2013 

В следующий раз я бегу инструмент на 03-30-2013 , Я хочу переместить существующий файл applist.log с новым именем, содержащим дату и время создания:

like applist_03-29-2013.log 

b иначе инструмент снова создаст applist.log 03-30-2013.

+4

Have вы посмотрели на логротат? http://linux.die.net/man/8/logrotate – patrickmdnet

ответ

1
mv applist.log applist_`date -r applist.log +%Y%m%d%H%M%S`.log 

Это переведет файл в новый файл с датой имени. Команда date позволяет отображать в любом формате. См. man date для полного описания этих последовательностей символов. Используя обратные тики, сначала запустите команду. Опция -r на дату получит дату соответствующего файла.

Пример:

[[email protected] temp]$ mv applist.log applist_`date -r applist.log +%Y%m%d%H%M%S`.log 
[[email protected] temp]$ ls -l 
total 196 
-rw-rw-r--. 1 me me  0 Mar 25 20:55 applist_20130325205532.log 

Я предполагаю, что ваша программа является хрон и не будет работать больше, чем один раз в секунду.

+0

@JumpOffBox, надеюсь, это поможет. – Jess

1

Получение времени создания файла зависит от используемой файловой системы.
Не все файловые системы поддерживают получение времени создания файла. Попробуйте:

stat --format=%w applist.log 

Если вы получаете один «-», файловая система делает не отчет времени создания. В противном случае он печатает время.

Если вы получаете время создания таким образом, вы можете использовать следующие сделать ход:

fileName="applist.log" 
creationTimeEpoch="$(stat --format=%W "${fileName}")" 
creationTime="$(date +%Y%m%d_%H%M%S --date="@${creationTimeEpoch}")" 
mv -i "${fileName}" "${fileName%.log}_${creationTime}.log" 

Если нет, то вы можете использовать время изменения файла:

fileName="applist.log" 
modificationTime="$(date +%Y%m%d_%H%M%S --reference="${fileName}")" 
mv -i "${fileName}" "${fileName%.log}_${modificationTime}.log" 
Смежные вопросы