私は以下のような日付のファイルのリストを持っています...
filename_20120101.dat
filename_20120102.dat
filename_20120103.dat
(ファイルの日付スタンプではなく)ファイル名の日付に基づいて最新のファイルを選択するスクリプトが必要です。
ls(1)
はファイルを名前でソートするため、ls | tail -1
すべきです。
必須のzsh回答:
echo "The highest-numbered file is" filename_*.dat([-1])
これは、 glob qualifier[NUM]
のglobであり、NUM番目の一致のみを保持します(負の値は最後の一致からカウントされます)。さまざまな幅の数値がある場合は、n
修飾子を
% ls
filename_1.dat filename_12.dat filename_17.dat filename_2.dat filename_8.dat
% echo filename_*.dat([-1])
filename_8.dat
% echo filename_*.dat(n[-1])
filename_17.dat
グロブは単語のリストを検索するコンテキストでのみ発生するため、ファイル名を変数に割り当てる場合は、1つの要素を含む配列にする必要があります。
latest=(filename_*.dat[-1])
echo "The highest-numbered file is $latest"
どのシェルでも、位置引数を一致の完全なリストに設定し、最後の引数を保持できます。
set_latest () {
eval "latest=\${$#}"
}
set_latest filename_*.dat
echo "The highest-numbered file is $latest"
これは、最後を番号順ではなくアルファベット順で返すことに注意してください。 filename_10.dat
はfilename_09.dat
の後、filename_9.dat
の前です。