次のファイルがあります
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
(必要に応じてシェル機能に簡単に切り替えることができます。)