2

ネットワークファイルシステム全体にたくさんのファイル(同じ名前、たとえばabc.txt)が散らばっています。

これらの各ファイルを再帰的に検索する必要があり、それぞれを見つけたら、コンテンツ検索を実行してそれらを置き換えます。

いくつかの調査の後、find コマンドを使用してファイルを見つけることができることがわかりました (-r を使用して再帰しますか?)。何かのようなもの:

    find . -r -type f  abc.txt

そして、sed を使用して、それぞれの検索と置換を行います。

    sed -ie 's/search/replace/g' abc.txt

しかし、abc.txt のすべての出現箇所を見つけて、それぞれを検索/置換するように、2 つを接着する方法がわかりません。

私のディレクトリ ツリーは非常に大きいので、すべてのディレクトリを再帰的に検索すると時間がかかることはわかっていますが、各ファイルを手動で検索するよりはましです。

私はBashでOSX 10.6を使用しています。

皆さんありがとう!

更新:以下に投稿された回答は他のOS(おそらくLinux)でも機能すると思いますが、OSXの場合は少し調整する必要がありました.

    find . -name abc.text -exec sed -i '' 's/search/replace/g' {} +

バックアップファイルを作成したくないことを示すために、sed の -i の後に空の引用符が必要なようです。このマニュアルページには次のように書かれています。

-i 拡張子:

ファイルをその場で編集し、指定した拡張子でバックアップを保存します。長さゼロの拡張子が指定された場合、バックアップは保存されません。

4

1 に答える 1

6
find . -r -type f abc.txt -exec sed -i -e 's/search/replace/g' {} +
于 2012-05-09T19:20:14.490 に答える