OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ファイル全てのある文字列を変更したい

  • すぐに回答を!
  • 質問No.204089
  • 閲覧数37
  • ありがとう数3
  • 気になる数0
  • 回答数4
  • コメント数0

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

ファイル総数は10,000個を越えます。
サブディレクトリも数百あります。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル10

ベストアンサー率 42% (53/126)

ysk6406 さんのようにfind コマンドを使用すればいいと思います。
元ファイルを残しておいたほうが心配がないので、

#!/usr/bin/sh

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

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

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

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

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

すみませんが
>find 対象のディレクトリ -type f -exec abctoxyz {} \;
の「 {} \」部分はなにをしているか教えてください。
投稿日時 - 2002-01-25 13:17:56
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル12

ベストアンサー率 40% (237/589)

おそらく様々な回答が寄せられると思いますが、私がよくやる方法をご紹介します。 bash 等の B-shell 系シェルで、次のようなスクリプトを実行します。 (C-shell を使っている場合は、まず“sh”と入力して、B-sh に移って下さい。) find dirname -type f -print | while read FILE do ex - $FILE << EOF ...続きを読む
おそらく様々な回答が寄せられると思いますが、私がよくやる方法をご紹介します。
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 は、対象となるツリーの一番上のディレクトリ名です。
お礼コメント
noname#41382

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

>おそらく様々な回答が寄せられると思いますが...
>
コマンド1つではできないようですね。
他にどんな回答がくるか楽しみです。 ^ ^;
投稿日時 - 2002-01-23 18:44:52
  • 回答No.3
レベル7

ベストアンサー率 42% (8/19)

>すみませんが >>find 対象のディレクトリ -type f -exec abctoxyz {} \; >の「 {} \」部分はなにをしているか教えてください。 find(1)を読みましょう http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.html ...続きを読む
>すみませんが
>>find 対象のディレクトリ -type f -exec abctoxyz {} \;
>の「 {} \」部分はなにをしているか教えてください。
find(1)を読みましょう

http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.html
お礼コメント
noname#41382

ありがとうございました。
参考URL 大変参考になりました。
投稿日時 - 2002-01-28 08:45:23
  • 回答No.4
レベル10

ベストアンサー率 42% (53/126)

補足しますね。 -exec コマンド名 {} \; {} は、find が見つけた条件の合う対象ファイル名で置換されます。 第一引数にファイル名を取るコマンドを実行するということです。 \ は ; をエスケープするために使います。意味はありません。 core を消すために、 find . -name core -exec rm {} \; などとよく使われます。 ...続きを読む
補足しますね。

-exec コマンド名 {} \;

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

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

などとよく使われます。
お礼コメント
noname#41382

補足ありがとうございました。
わかりやすい例 たすかります。
投稿日時 - 2002-01-28 08:48:25
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ