rmコマンド的な関数を書いてみた

背景

ファイルをrmコマンドで消して、後日、そのファイルが必要になったりする。
どこかに移動してくれるコマンドがあったら嬉しい。
それ、mvコマンドでできるよ。
でも、移動先を毎回指定するのは面倒だよね。
じゃあ、zshの勉強の機会に関数でも作ってみたら〜。

準備

関数dlを置く。
~/.zfunc/dl

  1 function dl () {
  2   if [ $# -eq 0 ]
  3   then
  4     echo "Usage!!!"
  5     return 1
  6   fi
  7 
  8   [ -d ~/.Trash ] || mkdir ~/.Trash
  9 
 10   for file in $*
 11   do
 12     if [ -e $file ] 
 13     then
 14       FNAME=`basename $file`
 15       TAG=`date +%y%m%d%H%M%S`
 16       mv $file ~/.Trash/${FNAME}.${TAG}.${RANDOM}
 17     else
 18       echo "No such file or directory:$file"
 19     fi
 20   done
 21   unset file FNAME TAG
 22   return 0
 23 }

変数FPATHにパスを追加して関数を探せるようにする。
~/.zshenv

export FPATH=~/.zfunc/:$FPATH

関数を呼び出して使えるようにする。
~/.zshrc

autoload -U dl

これで関数dlが使えるようになる。

使ってみる

% ls
a.txt b.txt c.txt d.txt
% dl *.txt
% ls
% cd ~/.Trash
% ls
a.txt.090110134456.12563	d.txt.090110134456.6711
b.txt.090110134456.24687	e.txt.090110134456.18628
c.txt.090110134456.19403

雑感

  • basenameコマンドの使いどころが分かった。
  • 乱数が$RANDOMで得られるとは便利。
  • 時間情報と乱数を付ける必要あるか?もっと、良い方法ないか?

追記

ライブドアブログ(livedoor Blog)| 読みたいブログが見つかるの関数のほうがファイル名がサッパリして素敵だと思い、
その関数を利用することにした。自分好みに多少、変更しているところもあるが。

  1 function dl () {
  2 
  3 if [ $# -eq 0 ]
  4 then
  5   echo "Usage!!!"
  6   return 1
  7 fi
  8 
  9 [ -d ~/.Trash ] || mkdir ~/.Trash
 10 
 11 for file in $*
 12 do
 13   if [ -e $file ]
 14   then
 15     BASENAME=`basename $file`
 16     FNAME=$BASENAME
 17     COUNT=0
 18     while [ -e ~/.Trash/$FNAME ]
 19     do
 20       COUNT=$(($COUNT+1))
 21       FNAME="${BASENAME}.${COUNT}"
 22     done
 23     mv $file ~/.Trash/$FNAME
 24   else
 25     echo "No such file or directory: $file"
 26   fi
 27 done
 28 
 29 unset file BASENAME FNAME COUNT
 30 return 0
 31 }