2017-12-08 9 views
0

ディレクトリとそのサブディレクトリのすべてのファイルの単語を探して置換する必要があります。ディレクトリとそのサブディレクトリの単語を検索して置換する

私はこのコード行を使用:

perl -pi -w -e 's/foo/bar/g;' *.* 

をしかし、それは現在のディレクトリ内のファイルだけで単語を変更し、サブディレクトリには影響を与えません。

どのようにすべてのディレクトリとサブディレクトリの単語を変更できますか?

答えて

1

あなたは再帰的にディレクトリ構造を横断純粋なPerlのソリューションを行うことができますそれはもっと多くのコードを書く必要があります。

より簡単な解決策は、すべてのファイルを見つけてそれらに対してコマンドを実行するように指示することができるfindコマンドを使用することです。

find . -type f -exec perl -pi -w -e 's/foo/bar/g;' \{\} \; 

(私は{}を脱出してきました。念のためしかし、あなたはこれを必要としない場合があります)

+0

これは私の友人がトリックでした。どうもありがとうございました!私は今これを正解とすることを待っています。ありがとうございました –

0

それを試してみてください。

ファイル名にスペースが含まれている場合は、再帰的に

を実行する必要があります

find -type f | xargs -r -I {} perl -pi -w -e 's/foo/bar/g;' {} 

find -type f -print0 | xargs -r0 -I {} perl -pi -w -e 's/foo/bar/g;' {} 
+1

-exec'は、あなたが望む機能を提供していない '場合を除きため、xargsのを使用する必要はありませんex:parallel ... https://unix.stackexchange.com/questions/24954/when-is-xargs-neededを参照してください。https://unix.stackexchange.com/questions/321697/why-is-looping- over-finds-output-bad-practice – Sundeep

関連する問題