プロが教える店舗&オフィスのセキュリティ対策術

Redhat7.1Jを使ってます。
あるディレクトリ配下に属するファイル(サブディレクトリの下のファイルも)全てを対象に
「abc」等の文字列を全て「xyz」等に変換しようとしています。
どのような方法がいいかご指導願います。

ファイル総数は10,000個を越えます。
サブディレクトリも数百あります。

A 回答 (4件)

補足しますね。



-exec コマンド名 {} \;

{} は、find が見つけた条件の合う対象ファイル名で置換されます。
第一引数にファイル名を取るコマンドを実行するということです。
\ は ; をエスケープするために使います。意味はありません。
core を消すために、

find . -name core -exec rm {} \;

などとよく使われます。
    • good
    • 0
この回答へのお礼

補足ありがとうございました。
わかりやすい例 たすかります。

お礼日時:2002/01/28 08:48

>すみませんが


>>find 対象のディレクトリ -type f -exec abctoxyz {} \;
>の「 {} \」部分はなにをしているか教えてください。
find(1)を読みましょう

http://www.linux.or.jp/JM/html/GNU_findutils/man …

参考URL:http://www.linux.or.jp/JM/html/GNU_findutils/man …
    • good
    • 0
この回答へのお礼

ありがとうございました。
参考URL 大変参考になりました。

お礼日時:2002/01/28 08:45

ysk6406 さんのようにfind コマンドを使用すればいいと思います。


元ファイルを残しておいたほうが心配がないので、

#!/usr/bin/sh

mv $1 $1.bak
cat $1.bak | sed 's/abc/xyz/g' > $1

のような簡単なスクリプトを書き、(仮にこれを abctoxyz として実行権を与え
てあるとして)

find 対象のディレクトリ -type f -exec abctoxyz {} \;

のようにすればよいかと思います。何かあってコマンドが固まってもオリジナル
ファイルが残っていれば安心です。(ファイルシステムフルには気をつけないと
いけませんね。スクリプトを適当に工夫してください。)

この回答への補足

回答ありがとうございます。

すみませんが
>find 対象のディレクトリ -type f -exec abctoxyz {} \;
の「 {} \」部分はなにをしているか教えてください。

補足日時:2002/01/25 13:17
    • good
    • 0

おそらく様々な回答が寄せられると思いますが、私がよくやる方法をご紹介します。


bash 等の B-shell 系シェルで、次のようなスクリプトを実行します。
(C-shell を使っている場合は、まず“sh”と入力して、B-sh に移って下さい。)

find dirname -type f -print | while read FILE
do
ex - $FILE << EOF
%s/abc/xyz/g
w
EOF
done

ここで、dirname は、対象となるツリーの一番上のディレクトリ名です。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
大変参考になりました。

>おそらく様々な回答が寄せられると思いますが...
>
コマンド1つではできないようですね。
他にどんな回答がくるか楽しみです。 ^ ^;

お礼日時:2002/01/23 18:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!