[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[fol] Re: recursive sed


大森保英です。
おかげさまで、
  1. html ファイルに対しては置換処理を行う
  2. *~, #*# にマッチするファイルはコピーしない
  3. その他のファイルは、再帰的にコピーする
という仕様のシェルスクリプトを完成できました。

 ->8- ->8- ->8- ->8- ->8- ->8- ->8- ->8- ->8- ->8-
#! /bin/sh
OLD_PAGES_PATH="$HOME/geocities"
NEW_PAGES_PATH="$HOME/new_geocities"

if [ ! -d $NEW_PAGES_PATH ] ; then
    echo "Creating $NEW_PAGES_PATH..."
else
    printf "$NEW_PAGES_PATH exists. Do anyway? (yes or no) "
    read a
    if [ "$a" = "yes" ] ; then
	echo "Clearing $NEW_PAGES_PATH..."
	rm -rf $NEW_PAGES_PATH
    else
	exit
    fi
fi
mkdir -p $NEW_PAGES_PATH

cd $OLD_PAGES_PATH

for i in `find *`; do
    if [ -d $i ] ; then
	echo "Creating $NEW_PAGES_PATH/$i..."
	mkdir -p $NEW_PAGES_PATH/$i
    else
	case "$i" in
	*.html )
	    echo "Converting $OLD_PAGES_PATH/$i to $NEW_PAGES_PATH/$i..."
	    sed -e 's/Program\/1018/Screen\/2348/' -e 's/<BODY.*>/<BODY TEXT="#4876FF" BGCOLOR="#E0FFFF" LINK="#0000FF" VLINK="#912CEE">/' $i > $NEW_PAGES_PATH/$i
		;;
	*~ )
	    continue
		;;
	\#*\# )
	    continue
		;;
	* )
	    echo "Copying $OLD_PAGES_PATH/$i to $NEW_PAGES_PATH/$i..."
	    cp -p $i $NEW_PAGES_PATH/$i
	esac
    fi
done
 ->8- ->8- ->8- ->8- ->8- ->8- ->8- ->8- ->8- ->8-

という内容です。
私の所では、bash-1.14.7(Vine Linux 1.1) を使っていて、
$ ls -l /bin/sh 
lrwxrwxrwx   1 root     root            4 May  1 04:43 /bin/sh -> bash
となっています。

On 2 Jul 1999 01:44:20 GMT,
in article <7lh5hk$obi$1 _at_ narans.cc.nara-wu.ac.jp>,
nide _at_ ics.nara-wu.ac.jp <nide _at_ ics.nara-wu.ac.jp> wrote:
>> シェルスクリプトで \.html? を条件に分岐させる方法がわからず
>> 詰まっています。
>
>  たしかに、ifでは分岐しにくいですね(exprを使えばできなくもないけど)。
>
>	case "$i" in
>	*.html)
>		…
>		;;
>	esac
>
>とかどうでしょう。あるいは、最初にディレクトリを全て掘っておいて、次は 
>find . -name \*.html でいくとか。

find の出力で、最初にディレクトリが出力され、
次にその中にあるファイル名が出力されるのを利用することで、
find を一回使うだけで処理できました。
この点で、find の実装に依存してしまうのかも知れません。
私の所では GNU Find Utilities ver 4.1(Vine Linux 1.1) を使っています。

Message-ID: <7lh945$i2g$1 _at_ cavalier.randd.itc.co.jp> の記事で、
Ken Nakagaki さんが使っていた、 tar -cf - と、tar -xf - を
パイプで組み合わせる手を使ったり、cp -r を使ったりして、
あらかじめファイルを一式コピーしてから置換処理を行っても
良かったかもしれません。
tar によるコピーと cp -r の違いが分かっていないので
なんとも言えないのですが…。

この場合だと、コピーしてから *~ や #*# などのバックアップファイルを
消すことになるのかな…?
-- 
大森保英(Yasuhide OOMORI)
mailto:dasen _at_ typhoon.co.jp

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
References: