mySQLのパスワードとユーザー名を変更し、それに応じてすべてのPHPスクリプトの接続文字列を変更する必要があります。
多くのPHPファイル名にスペースが含まれているため、このコマンドの使用に問題があります。
「該当するファイルまたはディレクトリなし」エラーが発生せずにこのコマンドを機能させるには、何を変更する必要がありますか?
これは私が使用するコマンドです:
pattern='mysql_connect("localhost", "olduser", "oldpwd")'
replacement='mysql_connect("localhost", "newuser", "newpwd")'
find . -name "*.php" | xargs -n 1 sed -i -e 's|$pattern|$replacement|g'
私はxargsとsedに慣れていません。これ同様の質問に答えてください。
(mysql_connectステートメントをphpインクルードファイルに入れて、次回は1つの場所に置き換えるつもりです。)
BASHを使用してUbuntu 14.04 LTSを実行しています。
ベストアンサー1
次のように二重引用符を使用する必要がありますNULL byte
。
find . -name '*.php' -print0 |
xargs -0 -n 1 sed -i -e "s|$pattern|$replacement|g"
または簡単なものを使用してくださいforループ:
for p in *php; do
sed -i -e "s|$pattern|$replacement|g" "$p"
done
シェルから正しく引用する方法を学ぶことは非常に重要です。
スペース/メタ文字を含むすべてのリテラルは「二重引用符」として扱われます。すべて拡張:
"$var"
、、、、。"$(command "$var")"
コードやテキストについてはを参照してください。"${array[@]}"
"a & b"
'single quotes'
$'s: 'Costs $5 US'
ssh host 'echo "$HOSTNAME"'
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words