Linux에서 dd-mm-yyyy hh:m:s를 사용하여 파일 이름을 기준으로 최신 파일을 선택하세요.

Linux에서 dd-mm-yyyy hh:m:s를 사용하여 파일 이름을 기준으로 최신 파일을 선택하세요.

다음 파일이 있습니다

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.shlatestfile.sh

(원하는 경우 이를 쉘 기능으로 쉽게 전환할 수 있습니다.)

관련 정보