コミケ告知

サークル networkmaniacs.net(旧:浜風もっこす) 2017.02.17 デブサミ内 DevBooksに出展します。
詳細は circle タグの記事へ。
2013年4月30日火曜日

findで特定条件の最新ファイルを探す

find 検索条件 | xargs ls -t | head -1
lsのオプションにhead -1相当のものがあるのではないかと確認しましたが、見つからず。
UNIXの思想からして、専用のツールをパイプで繋げるのは正しいのだろうけど、若干打つのがめんどくさいですね。

使用目的

実行ファイルが落ちたときに、最新のダンプファイルをgdbに食わせたかったけども、探すのが意外とめんどくさい!というのが元々のモチベーションでした。
gdb ./a.out `find -name "*.core"  | xargs ls -t | head -1`
他には、適当な名前のログファイルや一時ファイルから最新を探したい場面も、たまにあったような気がします。

シェル関数化

定型処理がめんどくさいので、latestで呼び出せるように。
### .zshrc等
latest() {
    find -name $1 | xargs ls -t | head -1
}
% latest "*.core"
./hoge1.core

-regexにした方がいいかなあと一瞬思ったけども、特定の拡張子を探すという主目的において、".*\.core"と打つのが嫌なので、-nameにしました。
$@にすれば他にもfindのオプションが指定できるのではないかとか、xargs ls -t | head -1だけまとめるのが美しいのではないかとか、そんなことも同様に一瞬考えて没案に。

0 件のコメント:

コメントを投稿