ファイル名が文字列で終わるディレクトリ内の最後のファイルを探します。

ファイル名が文字列で終わるディレクトリ内の最後のファイルを探します。

作業を高速化するためにファイルを作成/コピーするスクリプトを作成しています。この場合、ディレクトリ内の特定の文字列で終わるファイルを検索し、1つ以上のファイルが見つかった場合は、シーケンスの最後のファイルをコピーする必要があります。 (見つからない場合、スクリプトは別のディレクトリから新しいファイルをコピーします。)

このディレクトリには複数のファイルセットを含めることができ、すべて次の形式に従います。

YYYYMMDD_##_user_filename.json

したがって、サンプルフォルダには次のものを含めることができます。

20161021_01_test_parameters.json
20161021_01_test_stack.json
20161021_02_test_parameters.json
20161021_02_test_stack.json
20161022_03_test_parameters.json
20161025_04_test_parameters.json
20161025_04_test_stack.json

parameters.jsonこの場合は、で終わるすべてのファイルを読み取り、バージョン番号(01、02など)に基づいてソートしてシーケンスの最後のファイルを見つけるスクリプトが必要です。次に、ファイルを次のバージョン番号を持つ同じフォルダにコピーする必要があります。この目的のために、日付は関係がなく、重複したバージョン番号がないと仮定できます。

私は使用していますif [ -e $1/*"parameters.json" ]; then cp $1/*"parameters.json" "$FILENAME"_parameters.json$1これらのファイルが移動されるディレクトリはどこにありますか?スクリプトが作業を実行するディレクトリの外にあり、場所、$FILENAME日付、バージョン番号などを計算するために使用される変数であるため重要です)。もちろん、これは最新の情報を見つけるのに便利です。効果はありません。

答え1

並べ替える数値は、常に下線で区切られた2番目のフィールドであるように見えるため、次のようなものを使用できます。

find path/to/dir/ -maxdepth 1 -name '*parameters.json' | sort -t_ -nk2,2 | tail -n1

改行文字を含むファイル名を処理する可能性が必要で、コアユーティリティがそれをサポートしている場合は、コマンド全体をnullで区切られたコマンドに置き換えることができます。

find path/to/dir/ -maxdepth 1 -name '*parameters.json' -print0 | sort -zt_ -nk2,2 | tail -zn1

関連情報