다음 파일이 있습니다
employee.arya-date-01-1-2022-time-22:42:00.txt.csv
employee.arya-date-02-1-2022-time-16:29:00.txt.csv
employee.arya-date-02-1-2022-time-19:35:00.txt.csv
employee.arya-date-03-1-2022-time-7:12:00.txt.csv
employee.arya-date-04-1-2022-time-16:33:00.txt.csv
employee.arya-date-04-1-2022-time-2:23:00.txt.csv
employee.arya-date-04-1-2022-time-7:2:00.txt.csv
employee.arya-date-29-1-2022-time-7:2:00.txt.csv
파일명 기준: 최신 파일은 " employee.arya-date-29-1-2022-time-7:2:00.txt.csv
"이겠지만, 아래와 같이 명령을 실행하려고 하면 최신 파일을 " employee.arya-date-04-1-2022-time-7:1:00.txt.csv
" 로 선택할 수 없습니다.
명령을 시도했지만 작동하지 않습니다.
ls employee.arya-*|sort -r|head -1
최신 파일을 구할 수 있는 방법이 있나요? ls 및 sort에서 모든 옵션을 시도했지만 그 중 아무 것도 작동하지 않았습니다. 누구든지 조언을 해줄 수 있나요?
답변1
다음은 작업을 수행하는 빠른 스크립트입니다.
(참고: 로캘에 좀 더 독립적이 되도록 변경했지만 여전히 모든 로캘에서 작동하지 않을 수 있습니다. 다른 형식을 허용하는 timestamp=
경우 이 줄을 편집하세요.)date
#!/bin/bash
latest=''
latesttimestamp=0
for file in employee.arya-* ; do
# remove everything up to -date-
datetime="${file#*-date-}"
# remove .txt.csv
datetime="${datetime%.txt.csv}"
# get the time (after -time-)
time="${datetime#*-time-}"
# get the date (before -time-)
date="${datetime%-time-*}"
# get the day
dd="${datetime%%-*}"
# get the month and year
mmyy="${date#*-}"
mm="${mmyy%-*}"
yyyy="${mmyy#*-}"
# get the timestamp for that datetime
timestamp="$(date --date="$yyyy/$mm/$dd $time" +'%s')"
# compare to latest found so far
if [[ "$timestamp" -gt "$latesttimestamp" ]] ; then
latest="$file"
latesttimestamp="$timestamp"
fi
done
echo "$latest"
latestfile.sh
다른 이름 으로 저장하고 . ( ) $PATH
에서 실행 가능하도록 만들면 됩니다.chmod a+x latestfile.sh
latestfile.sh
(원하는 경우 이를 쉘 기능으로 쉽게 전환할 수 있습니다.)