一瞬で「今日のディレクトリ」を作成・移動できるRuby/Bashスクリプト
ちょっとしたファイルを作成・保存しておきたい時、自分にとっては「今日の日付のディレクトリ」にまとめておくのが丁度よい。これまでは毎日手作業で「今日の日付のディレクトリ」を作成・移動していたのだけど、これを毎回やるのが面倒臭い。ということでスクリプトで自動化した。ちなみに環境はruby1.9.2。bash 3.2.48。
※追記
ブコメでご指摘いただいた通り、Ruby使わないでBashだけでできます...なぜわざわざRubyを使ったのか...そこにRubyがあったからです...
機能
・シェルで「. today」と入力すると「~/daily/今日の日付(yyyy_mm_dd)」ディレクトリを作成し移動する
実装にあたって
Rubyでディレクトリを作るのは簡単なのだが、現在のシェルを移動するのに一工夫必要だった。RubyでDir.chdirするだけでは、現在のシェルのディレクトリは移動しない(あくまでもrubyコマンドを実行したシェルの子プロセスとして動くから)。そこで「Rubyはディレクトリ作成後、移動コマンド(cd ...)を標準出力に吐き出す→吐き出されたコマンドを現在のシェルで実行する」という処理にした。
標準出力に吐き出された文字列をBashのコマンドとして実行するには「コマンド置換($()か``)」を使う
コマンド置換
コマンド置換 (command substitution) を用いると、 コマンド名をコマンドの出力で置き換えられます。...
http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html
コマンドを現在のシェルで実行するには「.かsource」を使う
. filename [arguments]
source filename [arguments]filename からコマンドを読み込み、現在のシェル環境の下で実行します。...
http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html
コードを書く
Ruby
~/script/today.rb
today = Time.now.strftime "%Y_%m_%d" today_dir = File.expand_path("~/daily/#{today}") Dir.mkdir(today_dir) unless File.exist? today_dir puts "cd #{today_dir}"
実行
※追記
ご指摘いただいたので、lsの表示結果を掲載しました
例えば、今日の日付が2013年1月20日で、この状態から
$ pwd /Users/hidenorimaehara $ ls ~/daily 2013_01_18 2013_01_19
シェルで以下のコマンドを打つと
$ . today
※「.」は「source」でもOK
今日の日付のディレクトリが作成され移動できる。
$ pwd /Users/hidenorimaehara/daily/2013_01_20 $ ls ../ 2013_01_18 2013_01_19 2013_01_20
となる
Macなら、こうすれば、ディレクトリ移動後にそのディレクトリをFinderを開けて便利。
$ . today
$ open .
終わり
ちょっとしたスクリプトだけど、自分にとっては結構便利だった!