내 디렉터리에 다음 패턴을 따르는 파일이 여러 개 있습니다.
logA.log.$todayDate.$timeCreated
logA.log.07222020.084355
비교하고 싶어요$time생성됨오늘 생성한 디렉터리에 있는 모든 파일의 일부를 사용하여 최신 버전의 로그 파일을 가져온 다음 해당 파일을 얻은 후 작업을 수행합니다.
내가 할 수 있는 가장 좋은 방법을 아는 사람이 있나요?
답변1
다음을 수행할 수 있습니다.
set -- logA.log."$(date +%m%d%Y)".*
eval "latest=\${$#}"
(또는 특정 사용이 완전히 안전 하더라도 shift "$(($# - 1))"; latest=$1
사용에 대해 종교적 반대가 있는 경우 ).eval
eval
전역 확장은 어휘적으로 정렬되므로 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
내장된 명령을 사용하여 해당 타임스탬프로 변수를 채울 수 있습니다 .strftime
zsh/datetime
strftime -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)