我将一个typo3网站(LAMP)从knopix服务器迁移到ubuntu 10.04计算机。现在一半的网站有点工作,另一个没有。我想我发现了问题,但无法解决它,因为我不够数学,所以我可以做好正则表达式的东西。
在新服务器上,文件位于“/ var / www / cms” 旧服务器将它们放在/media/sda3/www/quickstart-4.2.1 /
中我认为如果包含sub-dirs的“/ var / www / cms”中包含“/media/sda1/www/quickstart-4.2.1/”字符串的所有文件都要替换为“/” var / www / cms“该网站将正常运作。
这个unix newbe非常感谢帮助。 提前谢谢!
乙
答案 0 :(得分:0)
看起来你不需要正则表达式。
这是一个普通的字符串搜索/替换,您可以使用任何文本编辑器。许多文本编辑器也不仅可以搜索/替换一个打开的文件,还可以搜索一个空洞目录。我经常使用jEdit
另外,不要直接在服务器上编辑文件,而是使用本地副本并在文件修复后传输这些文件应该会容易得多。
答案 1 :(得分:0)
查找基于管道的是您的朋友。这个答案假定基于Linux / Unix的操作系统。
我强烈建议您只需剪切每个命令,一次一个,粘贴到命令行 在您有更多经验之前,不要尝试将其转换为shell脚本。 确保你理解每个步骤正在做什么,并三重检查结果是否真的是它们应该是什么,而不仅仅是你想要它或者假设它应该是; - !)
# goto the root of your new filesystem
cd /var/www/cms
# print out the filenames with the old path in it
find . -print | xargs grep -l "/media/sda1/www/quickstart-4.2.1/"
# find . -print all fileNames
# take output from find (via pipe)
# xargs manages creation of command line with filenames from pipe
# grep -l saarchs for target string and prints only file names
# make sure there are no files in this list that shouldn't be modified.
# backup files in list
find . -print | xargs -I {} /bin/cp {} {}.sav_20110405
# note that the sav_20110405 is date composed by YYYYMMDD.
# A good habit to get into
# run a test on one file from list above
testFile=/var/www/cms/yourFileNameHere.html
find . -print -name ${testFile} \
| grep -v 'sav_20110405$' \
| while read fName ; do
ex - ${fName} <<EOS
:%s/\/media\/sda1\/www\/quickstart-4.2.1/\/var\/www\/cms/g
:wq
EOS
done
这很好,因为使用sed解决方案,您必须管理修复程序重定向到新文件,然后将固定文件重命名为原始文件。
ex编辑器就像vi编辑器,但是用于指令的批量输入,并且好处是你可以发出'write'命令和'q'退出。
重要强> 某些shell和/或ex命令在这种构造中存在问题。这就是我们为什么要测试备份的一个文件的原因。在继续操作之前,请确保文件正常并且备份文件已就位。
# inspect the 'fixed file' and be *really* sure there it is correct
# also be sure the ${testFile}.sav_20110405 did NOT get modified.
# run command for all files
find . -print \
| grep -v 'sav_20110405$' \
| while read fName ; do
ex - ${fName} <<EOS
:%s/\/media\/sda1\/www\/quickstart-4.2.1/\/var\/www\/cms/
:wq
EOS
done
在您的待办事项列表中记下1个月后,返回并删除sav文件。
find . -print -name '*.sav_20110405'
选择文件名
find . -print -name 'myTestFile.sav_20110405' | xargs /bin/rm
确保这是唯一删除的文件。
现在清理其余文件
find . -print -name '*.sav_20110405' | xargs /bin/rm
祝你好运并三重检查一切; - )!。
我希望这会有所帮助。
P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,并且/或者给它一个+(或 - )作为有用的答案。