次のページ 前のページ 目次へ

12. いろいろなスクリプト

12.1 ディレクトリ上の全ファイルにコマンドを適用する方法

(作成中)

12.2 サンプル: 非常にシンプルなバックアップスクリプト(改良版)

        #!/bin/bash          
        SRCD="/home/"
        TGTD="/var/backups/"
        OF=home-$(date +%Y%m%d).tgz
        tar -cZf $TGTD$OF $SRCD
        

12.3 ファイル名変更スクリプト

        #!/bin/sh
        # renna: いくつかのルールに従って、複数のファイルをリネームする
        # スクリプト: Felix Hudson Jan 2000 
        

        # 最初にこのプログラムが取るいくつかの「モード」についてチェックする
        # 第一引数($1)の条件が一致するなら、プログラムの該当部分を実行して
        # 終了する
        

        # prefix の条件をチェックする
        if [ $1 = p ] ; then
        

        # モード変数($1)と prefix ($2)を取り除く
        prefix=$2 ; shift ; shift
        

        # ファイルが指定されているか簡単にチェックする
        # 指定されていないときは、存在しないファイルをリネームすることは
        # できないので、なにもしない             
        if [$1 = ]; then
             echo "no files given"
             exit 0
        fi
        

        # プログラムの引数となるファイルを順にループ処理する
        # ファイルをひとつずつリネームする
        for file in $*
            do
            mv ${file} $prefix$file
        done
        
        # ここでプログラムを終了する
            exit 0
        fi
        

        # suffix をリネームするかチェックする
        # ここでの残りの部分は上記とおなじ処理なので、そちらを見てほしい
        if [ $1 = s ]; then
            suffix=$2 ; shift ; shift

        if [$1 = ]; then
            echo "no files given"
            exit 0
        fi

        for file in $*
            do
             mv ${file} $file$suffix
            done
            exit 0
        fi
        

        # 名前の置き換えかどうかをチェックする
        if [ $1 = r ]; then
            shift
        
        # ユーザが処理の内容を指定しなかったとしてもファイルがダメージを
        # 受けないように、次のコードを含めた
        if [ $# -lt 3 ] ; then
            echo "usage: renna r [expression] [replacement] files... "
            exit 0
        fi
        

        # 余計な情報を削除する
        OLD=$1 ; NEW=$2 ; shift ; shift
        

        # この for ループはプログラムに与えられたファイルを順に処理する
        # sed というプログラムを使って、ファイルをひとつずつリネームする
        # sed は標準入力を読み込んで、特定の表現を与えられた文字列に置換する
        # ここでは、標準入力からファイル名を指定して、必要な文字を置換させる
        for file in $*
            do
             new=`echo ${file} | sed s/${OLD}/${NEW}/g`
             mv ${file} $new
            done
            exit 0
        fi
        

        # ここまで来たとすると、プログラムに引数がなかったということなので、
        # 使い方を表示する
        echo "usage;"
        echo " renna p [prefix] files.."
        echo " renna s [suffix] files.."
        echo " renna r [expression] [replacement] files.."
        exit 0
        

        # 終了
        

12.4 ファイル名変更スクリプト(簡易版)

        #!/bin/bash
        # renames.sh
        # basic file renamer

        criteria=$1
        re_match=$2
        replace=$3
     
        for i in $( ls *$criteria* ); 
        do
            src=$i
            tgt=$(echo $i | sed -e "s/$re_match/$replace/")
            mv $src $tgt
        done
        

次のページ 前のページ 目次へ