テキストの一部を変更する必要があるファイルが何百もあります。
たとえば、「http://」のすべてのインスタンスを「rtmp://」に置き換えたいとします。
ファイルの拡張子は .txt で、複数のフォルダーとサブフォルダーに分散しています。
私は基本的に、すべてのフォルダー/サブフォルダーとすべてのファイルを通過する方法/スクリプトを探しています。そのファイル内で「http」が見つかった場合は、「rtmp」に置き換えます。
テキストの一部を変更する必要があるファイルが何百もあります。
たとえば、「http://」のすべてのインスタンスを「rtmp://」に置き換えたいとします。
ファイルの拡張子は .txt で、複数のフォルダーとサブフォルダーに分散しています。
私は基本的に、すべてのフォルダー/サブフォルダーとすべてのファイルを通過する方法/スクリプトを探しています。そのファイル内で「http」が見つかった場合は、「rtmp」に置き換えます。
find
との組み合わせでこれを行うことができますsed
。
find . -type f -name \*.txt -exec sed -i.bak 's|http://|rtmp://|g' {} +
これにより、各ファイルのバックアップが作成されます。いくつかをチェックして、希望どおりになっていることを確認してから、次を使用してそれらを削除することをお勧めします
find . -name \*.bak -delete
これを行うために私が使用するzsh
関数は次のとおりです。
change () {
from=$1
shift
to=$1
shift
for file in $*
do
perl -i.bak -p -e "s{$from}{$to}g;" $file
echo "Changing $from to $to in $file"
done
}
素敵な Perl メカニズムを利用して、バックアップ ファイルを作成し、指定されたファイルを変更します。上記を使用して、次のようにファイルを反復処理できます。
zsh$ change http:// rtmp:// **/*.html
または単純なスクリプトに入れるだけです#!/bin/zsh
(強力なグロビングにzshを使用しています)