ちょっとしたdirectoryの整理をemacs上で簡単に。

こんな状況のとき

本来は

linuxとかshをよく知っている人には
コマンドを上手につなげて簡単にできるような処理なのかもしれません。
でも、やり方が分からないのでrubyの力を借りることにします。

でもrubyの場合。

ruby -r fileutils -e '..'」とやっているうちに何が何だかわからなくなってしまいます><。
見やすい状態でコードが書きたいです。(具体的にはemacsで)

そこで、

.emacs

(defun ruby-eval-buffer (&optional print?)
  "Evaluate the buffer with ruby."
  (shell-command-on-region (point-min) (point-max) "ruby")
  (if print?
      (insert-buffer-substring-as-yank "*Shell Command Output*")))
(add-hook 'ruby-mode-hook
	  (lambda ()
	    (define-key ruby-mode-map "\C-c@"
	      (lambda () (interactive) (ruby-eval-buffer)))
	    (define-key ruby-mode-map "\C-c`" 
	      (lambda () (interactive) (ruby-eval-buffer t)))
	    ))		

を追加しておくと、「C-c@」で現在開いているバッファの内容をrubyに実行させることができます。
(C-c`だと実行結果を現在のバッファに書き込みます。(rcodetool.elを入れてからあまり使わなくなりました))
そんなわけで、例えば"*scratch*"のmodeをruby-modeに変えた後に
以下のようなコードを書いてからC-c@で"~/box/"内のファイルを"~/box/used/"に移動することができます。
emacsなのでコードを書くのが楽です。

p = (ENV["HOME"]+"/box")
Dir.chdir(p)
t =  Dir["*"].reject{ |e| File.directory? e}
require 'fileutils'
FileUtils.move(t,p+"/used/", :verbose => true, :noop => true)
#:noopがtrueになっているので移動はしません。
#(本当に移動させたいときには:noopをなくします。)