希望是一个很简单的。
我有一个php3网站,我想在php 5.2上运行
首先,我想将每个对当前“index.php3”_within_each_file_(递归)的引用更改为“index.php”,然后继续担心全局变量等。
ķ。去!
:)
更新:非常感谢!我意识到我的问题错过了引用在网站的每个文件中的事实,我想在所有文件/文件夹中递归地进行。
答案 0 :(得分:5)
find -type f -exec perl -pi -e 's/\bindex\.php3\b/index.php/g' {} \;
答案 1 :(得分:4)
怎么样:
for file in *.php3
do
sed 's/\.php3/.php/g' $file > ${file%3}
done
for / do / done循环依次处理每个.php3文件,编辑文件并用.php3
替换每个字符串.php
,并将文件从something.php3复制到something.php
为修正后的问题添加:
for file in $(find . -type f -name '*.php3' -print)
do
sed 's/\.php3/.php/g' $file > ${file%3}
done
这些天通常可以省略'-print
',但从历史上看,很多机器时间被忘记添加它的人浪费了,因为最初(POSIX之前)没有默认操作。
这个片段是关于原始代码进行扩展任务的最简单修改,但不一定是最好的方法 - 它在处理之前预先生成整个文件列表。你可以改用:
find . -type f -name '*.php3' -print |
while read file
do
sed 's/\.php3/.php/g' $file > ${file%3}
done
但是,如果文件名或路径名可以包含空格或换行符或其他此类字符,则修改后的版本都会遇到问题。要避免此类问题,您必须更加努力 - 使用Perl或(GNU find + xargs)或其他一些技术。如果你理智,你可以避免这些问题。如果你继承了一个不太完全理智的设置,那么你可能需要深入研究Unix文件名处理的基础。
答案 2 :(得分:2)
sed -i 's/php3/php/g' *
假设您使用的是类似Unix的操作系统。
答案 3 :(得分:1)
要以递归方式执行此操作,请使用Jonathan的答案,但将find . -type f
替换为* .php3。请注意,后面的刻度很重要,你可以用任何目录替换“。” (即当前目录)。这是一个版本,也在过程中重命名文件(* .php3 - > * .php)。
#!/bin/bash
for file in `find . -type f`
do
sed 's/\.php3/\.php/g' $file > ${file//3/}
rm $file
done