날짜와 시간이 포함된 여러 파일 접미사를 비교하고 최신 접미사에 대해 작업을 수행합니다.

날짜와 시간이 포함된 여러 파일 접미사를 비교하고 최신 접미사에 대해 작업을 수행합니다.

내 디렉터리에 다음 패턴을 따르는 파일이 여러 개 있습니다.

logA.log.$todayDate.$timeCreated
logA.log.07222020.084355

비교하고 싶어요$time생성됨오늘 생성한 디렉터리에 있는 모든 파일의 일부를 사용하여 최신 버전의 로그 파일을 가져온 다음 해당 파일을 얻은 후 작업을 수행합니다.

내가 할 수 있는 가장 좋은 방법을 아는 사람이 있나요?

답변1

다음을 수행할 수 있습니다.

set -- logA.log."$(date +%m%d%Y)".*
eval "latest=\${$#}"

(또는 특정 사용이 완전히 안전 하더라도 shift "$(($# - 1))"; latest=$1사용에 대해 종교적 반대가 있는 경우 ).evaleval

전역 확장은 어휘적으로 정렬되므로 HHMMSS형식에 따라 목록의 마지막 확장이 최신 확장이 됩니다.

그리고 zsh:

(){latest=$argv[-1];} logA.log.${(%):-%D{%m%d%Y}}.*

또는:

(){latest=$1;} logA.log.${(%):-%D{%m%d%Y}}.*([-1])

${(%):-%D{%m%d%Y}}%프롬프트 확장으로 확장하려면 매개변수 확장 플래그를 사용하십시오 %D{%m%d%Y}. 물론 이를 "$(date +%m%d%Y)"더 명확하게 하기 위해 대체할 수도 있지만, 그러려면 추가 프로세스를 포크하고 별도의 유틸리티를 실행해야 합니다.

또는 모듈 에 zsh내장된 명령을 사용하여 해당 타임스탬프로 변수를 채울 수 있습니다 .strftimezsh/datetimestrftime -s today %m%d%Y$today

답변2

some_command_that_takes_this_file_as_argument $(find . -iname "logA.log.$(date +%m%d%Y).[0-9]*" 2> /dev/null | sort -n | tail -1)문제를 해결해야 한다

편집하다: 최신 로그 파일만 사용하려는 경우 더 간단하게 만들 수 있습니다.
some_command_that_takes_this_file_as_argument $(ls -rt | grep ^logA.log. | tail -1)

관련 정보