ディレクトリ内の最新のファイルにアクセスする(アルファベット順にソート)

ディレクトリ内の最新のファイルにアクセスする(アルファベット順にソート)

タイムスタンプの前に自動生成されたファイルがいっぱいのディレクトリにあるファイルを開くためにコマンドラインでvimを使用しようとしています。私の頭の中のタイムスタンプがわからないので、ディレクトリで最新のタイムスタンプ(アルファベット順リストの最後のタイムスタンプ)を開きたいと思います。

vim ./my_dir/<last_item>

これを行う方法はありますか?

答え1

これは実際にzshの仕事です。

vim my_dir/*(om[1])

括弧内のビットはグローバル予選。たとえば、以前の*一般的なglobパターンは、ログファイルのみを考慮したい場合は、*.log.globo修飾子を使用して一致のソート順を変更できます。omつまり、修正時刻に基づいて最新の項目からソートします。 glob[修飾子は、部分一致のみが返されることを意味します。つまり、[1]最初の一致が返され、次[2,4]の3つの一致が返され、[-2,-1]最後の2つの一致が返される式です。ファイル名がタイムスタンプで始まるだけで*([1])十分です。

他のシェルでは、最新のファイルを選択する良い方法はありません。ファイル名に印刷できない文字や改行文字が含まれていない場合は、以下を使用できます。

vim "$(ls -t mydir | head -n 1)"

名前に基づいて最初または最後のファイルを選択したい場合は、コマンドラインでは少し冗長ですが、スクリプトでは完全に使用できる完全に安定した移植可能な方法があります。

set -- mydir/*
first_file_name=$1
eval "last_file_name=\${$#}"

答え2

my_dir 内にある場合:

vim $(ls -rt | tail -1)

答え3

これは私にとって効果的です。

$ ls -rt | tail -1 | xargs vim

ただし、最後のエントリとしてディレクトリがある可能性があり、その場合はディレクトリをフィルタリングする必要があります。

$ ls -rt | grep -v "^d" | tail -1 | xargs vim

答え4

これを探していると思います。

[centos@centos temp]$ for i in `seq 100`; do touch $i; done

[centos@centos temp]$ ls -t1 | head -1
100


[centos@centos temp]$ vim /.my_dir/$(ls -t1  | head -1)

ただし、ソートは完全にファイル名によって異なります。

関連情報