コミケ告知

サークル活動の詳細は circle タグの記事へ。
ラベル shell の投稿を表示しています。 すべての投稿を表示
ラベル shell の投稿を表示しています。 すべての投稿を表示
2015年4月8日水曜日

mvしてln -sするシェル関数を用意した

ファイルを移動して、移動先から元の位置にシンボリックリンクを張りたい。そんな場面がたまにあります。ぴったり合う物をすぐには見つけられなかったので、シェルスクリプトの練習も兼ねて作りました。

  • 書式はmvと同じ
  • b, f, vオプションだけ受け付けてmvに渡す
作成にあたり、以下の情報を参考にしました。
こんな単純なものが今まで作られていないわけが無いと思うので、検索に使うmv・ln・移動・シンボリックあたりの単語で余計なものが引っかかりすぎているだけのような気はしますが…。
(これは惜しかった → linux - Bash: move file/directory and create a link of it - Stack Overflow)
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だけまとめるのが美しいのではないかとか、そんなことも同様に一瞬考えて没案に。