
完全な 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
ファイルを削除した後)、私の中の強迫性障害は、これを正しく行う方法を本当に知りたいと思っています。注: 私は Mac でローカルに作業していますが、Linux でもこれを実行します。
どのようなアイデアでも大歓迎です!
答え1
解決策1: 1つの方法は、find
以下を使用することですxargs
:
find /dir -type f -print0 | xargs -0 sed -i 's#http://domain.com#https://www.domain.com#g'
解決策2find
: もう 1 つは、を使用することです-exec
。これは、あなたの質問と非常に似ています。
find /dir -type f -exec sed -i 's#http://domain.com#https://www.domain.com#g' {} +
sed
どちらのソリューションも、複数のファイルを引数として呼び出します。したがって、sed
すべてのファイルに対して 1 回呼び出されるのではなく、すべてのファイル セットに対して呼び出されます。
解決策3: の代わりに、検索置換ジョブに を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'