ファイル名にスペースが含まれている場合は、ディレクトリ内のすべての.phpファイルでログイン文字列を検索して置き換えます。

ファイル名にスペースが含まれている場合は、ディレクトリ内のすべての.phpファイルでログイン文字列を検索して置き換えます。

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

おすすめ記事