頻出コンボ

UNIXコマンドラインを使っていると、

というのは頻出コンボだと思う。ということで、このコンボを簡略化してみる。
まず一つ目。指定したディレクトリを作成して、そこに移動する。
以下の内容を.profileに書く。

mdcd()
{
    mkdir -p "$1"
    cd "$1"
}

(2005/02/24 バグフィックス(^^;;)
二つ目。01、02、03とシーケンシャルな番号のディレクトリを作成して、そこに移動する。まず、以下の内容でndirというファイルを作って、

#!/usr/bin/env ruby
# -*- ruby -*-
#
# $Id: ndir,v 1.1 2005/01/15 14:51:54 s-tanaka Exp $
#

dirs = []

Dir.open((ARGV[0]) ? ARGV[0] : '.') do |dir|
  dir.each do |file|
    next unless FileTest.directory? file
    next unless file =~ /^\d\d$/
    dirs << file
  end
end

puts (dirs.size == 0) ? '01' : dirs.sort[-1].succ

以下を.profileに追加する。

ndcd()
{
    local dir=`ndir`
    mkdir -p $dir
    cd $dir
}

(2005/02/24追記)
http://quasiquote.org/log/2005/02/23/shellscript-tipsで/usr/binだけで実行可能なndir()を教えていただきました。Rubyをインストールしていない方はこちらをどうぞ。

ndir()
{
    # $d: 最後のシーケンシャルなファイル名を拾う
    local d=`ls | egrep '^[0-9]+$' | sort -n | tail -1`
    # $w: ファイル名の文字数
    local w=`echo $d | wc -c | rs 0 1`
    if [ "$d" = "" ]; then d=-1; w=1; fi
    printf %0`expr $w - 1`d `expr $d + 1`
}

(2005/02/24追記ここまで)
三つ目。0221とか0222とか日付けのディレクトリを作成して、そこに移動する。

ddcd()
{
    local dir=`date +%m%d`
    mkdir -p $dir
    cd $dir
}

ちょっとの工夫がいい感じ。でもやりすぎるとまっさらの環境で使いものにならなくなるんだよなぁ。