需要があるかどうかは分かりませんが、lflというコマンドラインツールをGitHub上で公開しました。よろしければお使いくださいませ~。
ディレクトリをコマンドライン引数として与えて実行すると、そのディレクトリ直下のファイルの中から、最新のファイルの名前を出力してくれます。
まぁ、かなりニッチなツールなので、需要があるかどうかは分かりませんが。
名前の由来
Latest updated FiLeという文字を取って、lflとしました。なぜ頭文字ではなく、そんな中途半端な文字を取ったかと言うと、updatedを後から付け足したからです。
元はlatest fileで「最新のファイル」と考えていたのですが、よくよく考えてみると、「最近作られた」という意味で最新なのか、「更新日時が最も新しい」という意味で最新なのか、色々な意味があるなと思ったので、後からupdatedを付け足しました(僕の英語力の低さが伺えますね)。
コンパイル方法
・元々はWindowsの標準コマンドに満足できなくて作ったものなので、Windows以外での動作させることは考えていません。というか、Win32 APIを使っているので、Windows以外では動きません。
その内Linuxにも対応したいとは思っていますが、いつになるかは分かりません。
・constevalを使った即時関数はC++20からだったはずです。なので、C++20以降でないとコンパイルできません。
・コンパイラはmsys2のpacmanでインストールしたclangを使っています。gccでもコンパイルできるような気はしますが、gccで上手くいくかどうかは試していないため、分かりません。
・cmakeで管理しています。プロジェクトのルートでcmakeを実行してから、cmake –buildを実行すればビルドできるはずです。
おすすめは、プロジェクトフォルダのルートにbuildというディレクトリを作って、その中で
cmake .. && cmake --build .
と実行することです。そうすれば、build/srcというディレクトリに実行ファイルを生成してくれます。
後は、パスを通せば使えます。「プロジェクトルート/bin」みたいなディレクトリを作ってから、実行ファイルを、そのディレクトリに移動して、そのbinにパスを通してもいいですし、build/srcディレクトリにパスを通してもいいですし、お好みで設定してくださいませ~。
使い方
下記のようなディレクトリ構成を前提に説明します。
directoryA───current directory
┠FileA
┠LatestFileA(in directoryA)
┠directoryB
┠FileB
┠LatestFileB(in directoryB こちらがdirectoryAのLatestFileよりも更新日時が新しい)
これは、カレントディレクトリがdirectoryAで、その下にFileAとLatestFileA、directoryBがあって、directoryBの中には、さらにFileB、LatestFileBがあるという状況を表しています。そして、directoryAのLatestFileAよりも、directoryBのLatestFileBの方が新しいと考えてください。
lflの実行ファイルが置いてあるディレクトリにパスが通っていれば、次のように使えます。
>> lfl
LatestFile
単にlflとだけ打って実行した場合です。この場合は、カレントディレクトリ直下のファイルを標準出力に出力します。
>> lfl directoryB
LatestFileB
>> lfl --directory directoryB
LatestFileB
lflにコマンドライン引数を指定して実行すると、そのディレクトリ内にある更新日時が最も新しいファイルの名前を標準出力に出力します。
>> lfl directoryXXX
directoryXXX does NOT exist.
もしも、存在しないディレクトリを指定したら、エラーメッセージを標準エラー出力に出力します。
>> lfl --help
<help message>
>> lfl --directory directoryB --help
コマンドライン引数にhelpが含まれていると、たとえ正しくディレクトリを指定していたとしても、ヘルプメッセージを標準出力に出力します。エラーメッセージはコピペが面倒だったので、ここには書きませんが。
それと、v0.0.2現在では、まだ–versionフラグに対応していなかったり、コマンド引数を2つまでしか指定できなかったりしますが、バージョンアップデートで次第に対応していく予定です。
lflのアップデートで大きな変化があったとき(vA.B.CのBが変更されるような変更があったとき)は、Twitter上で告知しようかと思っているので、よかったらフォローをよろしくお願いします。