파일명의 구조는 다음과 같습니다 name$timestamp.extension
.
timestamp=`date "+%Y%m%d-%H%M%S"`
따라서 디렉토리에 다음 파일이 있는 경우:
name161214-082211.gz
name161202-082211.gz
name161220-082211.gz
name161203-082211.gz
name161201-082211.gz
답변의 코드/스크립트가 실행되면 값이 20
변수에 저장되어야 합니다.highest_day
highest_day = 20
답변1
파일 타임스탬프를 사용하지 않으면 약간 다루기 힘들지만 다음과 같은 방법으로 이를 수행할 수 있습니다.
#!/usr/bin/env bash
re="name([0-9]{6})-([0-9]{6})\.gz"
re2="([0-9]{2})([0-9]{2})([0-9]{2})"
for file in *.gz
do
if [[ "$file" =~ $re ]]
then
# BASH_REMATCH[n] on filename where n:
# [1] is date ie. 161202
# [2] is time ie. 082211
date=${BASH_REMATCH[1]}
# BASH_REMATCH[n] on date string where n:
# [1] is year ie. 16
# [2] is month ie. 12
# [3] is day ie. 02
[[ $date =~ $re2 ]] && day=${BASH_REMATCH[3]}
# Keep max day value
[[ $day > $highest_day ]] && highest_day=$day
fi
done
echo $highest_day
답변2
당신은 이것을 할 수 있습니다 ...
highest_day= $(for i in *.gz; do echo ${i:8:2}; done | sort -n | tail -1)
답변3
파일 목록이 파일 안에 있으면 다음과 같습니다.
$ cd dir
$ ls -1 * >infile
이 파이프라인은 다음 작업을 수행합니다.
$ sed 's/[^0-9]*\([0-9]*\)-.*/\1/' infile | sort -r | head -n1 | cut -c 5-6
20