Переименование журнала с отметкой времени и строкой - PullRequest
0 голосов
/ 24 февраля 2012

У меня проблема с тем, что файлы журнала должны создаваться два раза в день.Когда они собираются быть созданы во второй раз, обнаруживается, что файл с таким именем уже существует, поэтому они не создаются.Поэтому я хочу, чтобы во время второго запуска я захотел переименовать первый журнал с отметкой времени и, возможно, строкой «Назад».

Это то, что у меня есть atm:

renameLogs() {

for x in $MY_FILE_PATH/logs/!Previous*$TIMESTAMP.log; do
mv "$x" "$Previous{x%*.log}$(TIMESTAMP).log";
done

}

при этом каждый раз, когда он запускается, он переименовывает все журналы, и я получаю имена журналов, например

MyLog_240220120224-15434620120224160148.log

Я просто хочу сделать следующее:

, чтобы проверить, ЕСЛИ журнал не содержит Previous И TIMESTAMP, затем переименовать журнал с помощью PREVIOUS + TIMESTAMP.Мои знания для этого ограничены, может кто-нибудь, пожалуйста, помогите.

Спасибо

1 Ответ

0 голосов
/ 24 февраля 2012

Простым решением является сохранение архивной директории для ваших именованных журналов, чтобы ваш cmd стал

mv "$x" $MY_FILE_PATH/archive_logs/"${x%*.log}$(date +%Y%m%d-%H%M%S).log"

на примере $MY_FILE_PATH/archive_logs/ выберите имя, которое имеет смысл для вас.

ELSE

Вы можете использовать другой трюк, чтобы цикл for не совпадал с переименованными лог-файлами

 mv "$x" "${x%*.log}$(date +%Y%m%d-%H%M%S).LOG"

Уведомление о переименовании .log в .LOG

ELSE

Вы должны исключить файлы из обработки

renameLogs() {
   for x in $MY_FILE_PATH/logs/*.log; do
      case "${x}" in
        *2[0-9][0-9][0-9][0-1][0-9][0-3][0-9]* ) 
           : # if_File_has_YYYYMMDD_value_embedded_skip_this_file
        ;;
        * ) 
          mv "$x" "${x%*.log}$(date +%Y%m%d-%H%M%S).log"
        ;;
      esac
   done
}

OR

Хм ... переформатирование перестало работать! ; - / * * 1 021

renameLogs () { для х в $ MY_FILE_PATH / logs / .log; делать если [[ ! "$ {x}" ~ = * 2 [0-9] [0-9] [0-9] [0-1] [0-9] [0-3] [0-9] *]]; затем mv "$ x" "$ {x% .log} $ (дата +% Y% m% d-% H% M% S) .log"; фи; сделанный ; }

Непроверенные.

Регулярное выражение используется.

Регулярные выражения являются расширением идеи подстановочного знака, с которой вы, возможно, знакомы по использованию командной строки, то есть ls *.txt будут расширяться только до файлов, заканчивающихся на txt, за исключением тех, которые заканчиваются на .exe, .bash , .txt2 и т. д.

Для вашего случая *2[...]* - это выражение reg, которое соответствует дате (исключая метку времени) в указанном вами формате. * = Любые символы, одиночные символы соответствуют только себе, и последний бит reg- ex magic - это диапазоны символов, в данном случае '[0-9]' и simliar.

Оператор ~= сообщает, что сравнивайте LeftH и RightHand с помощью регулярных выражений.

Проверьте, соответствует ли ${x} 1043 *

 * any chars, 
 follow by '2', 
 followed by any number [0-9] (3 times) (a year value)
 followed by [0-1][0-9] ( a month value)
 followed by [0-3][0-9] ( a day value)
 * any chars, 

Таким образом, вы можете легко расширить *2[0-9][0-9][0-9][0-1][0-9][0-3][0-9]*, чтобы включить слово «предыдущий» в правильное местоположение, чтобы reg-expr соответствовал вашему окончательному значению $ {x}, т.е.

 if [[ "${x}" ~= *Previous*2[0-9][0-9][0-9][0-1][0-9][0-3][0-9]* ]] ; then ...

Надеюсь, это поможет.

...