每个用户都有一些使用共享数据库的 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