以下のすべての出現箇所を検索して置換するにはどうすればよいでしょうか。
subdomainA.example.com
と
subdomainB.example.com
ディレクトリツリーの下にあるすべてのテキストファイルに/home/www/
再帰的に?
ベストアンサー1
find /home/www \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i 's/subdomainA\.example\.com/subdomainB.example.com/g'
-print0
それぞれの結果を、改行ではなくヌル文字で区切って印刷するように指示しますfind
。ディレクトリに名前に改行が含まれるファイルがある場合でも、xargs
正しいファイル名で作業できます。
\( -type d -name .git -prune \)
は、 という名前のディレクトリをすべて完全にスキップする式です.git
。SVN を使用する場合や、保持したい他のフォルダがある場合は、簡単に拡張できます。-not -path .git
つまり、より多くの名前と一致させるだけです。 とほぼ同等ですが、ディレクトリ内のすべてのファイルをチェックするのではなく、完全にスキップするため、より効率的です。 の実際の動作-o
のために、 の後の が必要です-prune
。
詳細については、 を参照してくださいman find
。