ごみ箱スクリプト
Windowsのファイル削除と違って、rm(1)はファイルをごみ箱に送らずに削除してしまう。で、この挙動で痛い目にあった人は、ごみ箱もどきを実装したスクリプトでよく胡麻化している。ウン百個目の車輪か分からないけど、僕もRubyで実装してみた。
ファイル名: saferm
#!/usr/bin/env ruby # -*- ruby -*- # $Id: saferm,v 1.1 2005/05/25 15:09:25 s-tanaka Exp $ # def run(cmd, *args) pid = fork do exec(cmd, *args) end Process.waitpid(pid) end trash = ENV['HOME'] trash += '/' if trash[-1] != ?/ trash += Time.now.strftime('.trash/%Y%m%d') endoptflag = false ARGV.each do |arg| unless endoptflag case arg when '--' endoptflag = true next when /^-/ next end end endoptflag = true run('/bin/mkdir', '-p', trash) run('/bin/mv', '-f', '--', arg, trash) end
以下のようにrmコマンドにaliasしておくと便利。
alias rm=saferm
他のスクリプトとの差別化ポイントとしては、コマンドのオプションを「適当に」読み飛ばしてくれる。例えば、saferm -rf fileの場合、file以下を全てごみ箱に移動する。saferm -- -fileの場合、-file以下を全てごみ箱に移動する。いつものrmの癖でオプションを付けても適当に扱ってくれる。
BUS。rm(1)とmv(1)の違いにまつわる細かい挙動の違いがいっぱい。