最簡單的解決辦法是保持一個文件目錄爲您命名日誌,所以你的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
}
或
嗯...重新格式化已停止工作! ; -/
爲$ MY_FILE_PATH/logs/.log中的x重命名日誌(){ ;做[ ] if [[! 「$ {x}」〜= * 2 [0-9] [0-9] [0-9] [0-1] [0-9] [0-3] [0-9] *]];然後 mv「$ x」「$ {x% .log} $(date +%y%m%d-%H%M%S).log」; fi; fi; 完成; }
未經測試。
使用正則表達式。
正則表達式是對使用命令行(即ls *.txt
)可能熟悉的通配符思想的擴展,即ls *.txt
將擴展爲僅以txt結尾的文件,不包括以.exe,.bash結尾的文件, .txt2等
對於您的情況,*2[...]*
是一個reg表達式,它與您指定的格式中的日期(不包括時間戳)相匹配。* =任何字符,單個字符與自己匹配,並且reg-ex的最後一位魔法是字符範圍,在這種情況下是'[0-9]'和simliar。
~=
運算符說比較LeftHand和RightHand使用正則表達式。
看看${x}
比賽
* 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 ...
我希望這有助於。
您應該查看[logrotate](https://iain.cx/src/logrotate/)您的發行版。 – 2012-02-24 17:38:55