쉬운 솔루션은 cmd를이 $MY_FILE_PATH/archive_logs/
와
mv "$x" $MY_FILE_PATH/archive_logs/"${x%*.log}$(date +%Y%m%d-%H%M%S).log"
가되도록 당신을 위해 의미가 이름을 선택, 그냥 예를되고, 명명 된 로그를 아카이브 디렉토리를 유지하는 것입니다 . ELSE
루프에 대한이 일치하지 않는, 그래서 당신은 몇 가지 다른 트릭을 사용할 수 있습니다 당신은 로그 파일을 ELSE
을 .LOG하는 .LOG의 이름을 변경
mv "$x" "${x%*.log}$(date +%Y%m%d-%H%M%S).LOG"
공지 사항 개명 파일을 처리에서 제외해야합니다.
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
}
또는
흠 ... 포맷팅이 작동을 멈췄습니다! ; -/
renameLogs() { for x $ MY_FILE_PATH/logs/.log; do [[[! "$ {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"; fi; 완료; }
테스트되지 않음.
정규식이 사용되었습니다.
정규 표현식은 명령 줄 사용에서 익숙한 와일드 카드 아이디어 (예 : ls *.txt
)의 확장으로, .exe, .bash 및 .bash로 끝나는 파일을 제외하고 txt로 끝나는 파일로 확장됩니다. .txt2 등
귀하의 경우, 지정된 형식의 날짜 (타임 스탬프 제외)와 일치하는 reg 표현식입니다. * = 임의의 문자, 단일 문자는 모두 자신과 일치하고 reg-ex의 마지막 비트는 magic is는 char 범위이며,이 경우 '[0-9]'와 simliar입니다.
~=
연산자는 정규식을 사용하여 LeftHand와 RightHand를 비교합니다. REG-expr이 $ {X}의 최종 값을 일치하도록 ${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,
그래서 당신은 쉽게 즉, 올바른 위치에 이전 단어를 포함하는
if [[ "${x}" ~= *Previous*2[0-9][0-9][0-9][0-1][0-9][0-3][0-9]* ]] ; then ...
을
*2[0-9][0-9][0-9][0-1][0-9][0-3][0-9]*
을 확장 할 수있는 경우
은 참조
도움이 되었기를 바랍니다.
배포판의 [logrotate] (https://iain.cx/src/logrotate/)를 확인하십시오. –