1. ホーム
  2. linux

[解決済み] パターンに一致する最新ファイルを検索するBash関数

2022-04-25 12:39:25

質問

Bashで、あるパターンにマッチする最新のファイルのファイル名を返す関数を作りたいのですが、どうすればいいですか? 例えば、以下のようなファイルのディレクトリがあるとします。

Directory/
   a1.1_5_1
   a1.2_1_4
   b2.1_0
   b2.2_3_4
   b2.3_2_0

b2'で始まる最新のファイルが欲しいのですが。 bashでこれを行うにはどうすればよいですか? 私はこれを私の ~/.bash_profile スクリプトを作成します。

解決方法は?

その ls コマンドは、パラメータ -t で時間順に並べ替えることができます。そして、最初の(新しい)ものをつかむには head -1 .

ls -t b2* | head -1

でも、気をつけてね。 lsの出力をパースしてはいけない理由

個人的な意見:パースする ls が危険なのは、ファイル名にスペースや改行などのおかしな文字が含まれる場合だけです。もし、ファイル名におかしな文字が含まれないことが保証されているのであれば ls はかなり安全です。

もし、多くの人が多くのシステムで様々な状況下で実行するようなスクリプトを開発しているのなら、私は ls .

以下は、"right"の方法です。 あるディレクトリにある最新(最も新しい、最も古い、最も古い)ファイルを見つけるにはどうすればよいですか?

unset -v latest
for file in "$dir"/*; do
  [[ $file -nt $latest ]] && latest=$file
done