完全なURLスキームを置き換える必要のあるファイルのセットがたくさんあります。一部のファイル名にはスペースが含まれています。多くの検索と試行錯誤の末、これは私が来た中で最も近いものです。
find /somedir -type f -print0 -exec sed -i'' -e 's#http\\:\\/\\/domain.com#https\\:\\/\\/www.domain.com#g' {} +
結果のファイルでは、スキームhttp:
が削除され、//
が残ります。つまり、「// www.domain.com」です。
さらに、ファイル名に-e
を追加して、新しいファイルが作成されます。 -つまり、明らかに不要なsome file.php-e
。
これは確かに十分ですが(*-e
ファイルを削除した後、私のOCDはこれを正しく行う方法を本当に知りたがっています。注:私はMacでローカルに作業していますが、Linuxでもこれを実行します。
どんなアイデアでも大歓迎です!
解決策1:1つの方法は、find
をxargs
とともに使用することです。
find /dir -type f -print0 | xargs -0 sed -i 's#http://domain.com#https://www.domain.com#g'
解決策2:もう1つは、find
を-exec
と一緒に使用することです。これは、質問と非常によく似ています。
find /dir -type f -exec sed -i 's#http://domain.com#https://www.domain.com#g' {} +
どちらのソリューションも、引数として複数のファイルを使用してsed
を呼び出します。したがって、sed
は、すべてのファイルに対して1回ではなく、すべてのファイルセットに対して呼び出されます。
ソリューション:sed
の代わりに、検索-置換-ジョブにPerl
を使用することもできます。
Perl -i -pe 's#http://domain.com#https://www.domain.com#g' file
find
/xargs
コマンドと組み合わせる:
find /dir -type f -print0 | xargs -0 Perl -i -pe 's#http://domain.com#https://www.domain.com#g'