1

我将typo3 网站(LAMP)从knopix 服务器迁移到ubuntu 10.04 机器。现在网站的一半有点像其他网站没有的。我想我找到了问题但无法解决它,因为我的数学能力不够,所以我可以做一些好的正则表达式。

在新服务器上,文件位于“/var/www/cms”中 旧服务器将它们放在 /media/sda3/www/quickstart-4.2.1/

我认为如果“/var/www/cms”中包含“/media/sda1/www/quickstart-4.2.1/”字符串的所有文件(包括子目录)都将替换为“/var/www /cms" 该站点将正常工作。

这个 unix newbe 将非常感谢您的帮助。提前致谢!

4

2 回答 2

0

看起来你不需要正则表达式。
这是一个普通的字符串搜索/替换,您可以使用任何文本编辑器进行。许多文本编辑器不仅可以搜索/替换一个打开的文件,还可以搜索一个空目录。我经常使用jEdit

此外,不要直接在服务器上编辑文件,而是使用本地副本并在文件修复后传输文件应该更容易。

于 2011-04-05T11:13:53.033 回答
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

祝你好运并三重检查一切;-)!。

我希望这有帮助。

PS,因为您似乎是一个新用户,如果您得到一个对您有帮助的答案,请记住将其标记为已接受,和/或给它一个 +(或 -)作为有用的答案。

于 2011-04-05T11:26:13.407 回答