用于替换每个用户的所有 PHP 文件中的字符串的 Shell 脚本

用于替换每个用户的所有 PHP 文件中的字符串的 Shell 脚本

每个用户都有一些使用共享数据库的 php 文件commondb。我想遍历所有用户(在 users.csv 中),并在他们的主文件夹(例如 /home/joe)中递归查找所有 php 文件,并将每个出现的“commondb”替换为他们自己的数据库名称,例如将“joe”替换为“joedb”。

我尝试了以下方法:

#!/bin/bash
# Execute like this:
# bash localize.bash users.csv

OLDIFS=$IFS
IFS=","
while read name dummy
  do
    echo $name
    find /home/${name} -name '*.php' -exec sed -i '' 's/commondb/${name}db/g' "{}" \;

  done < $1
IFS=$OLDIFS

对于用户.csv

joe, Joe J
george, George G

它没有失败,但文件没有改变。我对 bash 相当不熟悉,我不知道如何调试它 :/

我的脚本可以修复并正常运行吗?

答案1

一开始我没看出你的代码有什么问题。事实上我运行了它,它运行得很好,只是由于在 sed 命令中使用了单引号,它用 ${name} 替换了 commondb。改成双引号就没问题了。

#!/bin/bash
# Execute like this:
# bash localize.bash users.csv

OLDIFS=$IFS
IFS=","
while read name dummy
  do
    echo $name
    find /home/${name} -name '*.php' -exec sed -i '' "s/commondb/${name}db/g" "{}" \;

  done < $1
IFS=$OLDIFS

相关内容