Linux(リナックス)で再帰的に検索を行い指定したディレクトリ配下の特定テキストを全て置換するスクリプト(Grep&replace on Linux)

サブディレクトリも含む一括置換コマンド。
Googleで検索しても、なかなか出てこない、ありそうでないスクリプト。
どっかからパクりをちょっと改造。

☆ソース(書式)

スクリプト#! /bin/sh
for i in $(find [dir]/* -print)
do
echo $i " is doing..";
cp $i ${i}_tmp
cat ${i}_tmp | sed 's@[From]@[To]@g' > $i
rm ${i}_tmp
done

☆使い方
usage:
[dir] ・・・ 対象ディレクトリ
[From] ・・・ 置換対象文字列
[To] ・・・ 置換後文字列
(From, Toの部分は機能文字は\でエスケープする必要アリ)
sedコマンドが分かってるひとは、From,Toのみならず、正規表現でいろいろできる!

☆ロジック
Findコマンドで再帰検索し、フルパスでディレクトリ付きのファイル名のリストを取得。
リストがなくなるまでリプレイス。
リプレイスにはsedコマンドを利用。
cpで元ファイルをtmpにバックアップを取って、catコマンドの出力をsedでフィルタリング。
結果を元ファイル名として書き出し。
その後tmpは削除。

☆その他
バイナリファイルもディレクトリも遠慮なく取ってきて処理します。
 バイナリはそのまま実行し、エラーなく動作。
 ディレクトリはエラーを出しますが動作には影響なし。
なので、ざっくりこいつでディレクトリ丸々かけてしまいましょう。

☆例

作成例#! /bin/sh
for i in $(find /home/www/html/* -print)
do
echo $i " is doing..";
cp $i ${i}_tmp
cat ${i}_tmp | sed 's@192.168.75.22@192.168.75.29@g' > $i
rm ${i}_tmp
done

データベース接続先の一括変更に!
片寄せ冗長化サーバのお供に!
ドメイン変更に!
アクセス計測タグの張替えに!!

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: Linux(リナックス)で再帰的に検索を行い指定したディレクトリ配下の特定テキストを全て置換するスクリプト(Grep&replace on Linux)

このブログ記事に対するトラックバックURL: http://kashinya.com/blog/mt-tb.cgi/646

コメントする