希望這是一個很好的簡單程序。如何在目錄中的每個文件中用'php'代替'php3'
我有一個PHP3網站,我想上運行PHP 5.2
首先我只是想有充分的參考電流「index.php3」 _within_each_file_(遞歸)改爲「 index.php「,然後繼續擔心全局變量等。
K. Go!
:)
更新:非常感謝!我意識到我的問題錯過了這樣一個事實,即引用位於網站的每個文件中,我希望以遞歸方式在所有文件/文件夾中進行引用。
希望這是一個很好的簡單程序。如何在目錄中的每個文件中用'php'代替'php3'
我有一個PHP3網站,我想上運行PHP 5.2
首先我只是想有充分的參考電流「index.php3」 _within_each_file_(遞歸)改爲「 index.php「,然後繼續擔心全局變量等。
K. Go!
:)
更新:非常感謝!我意識到我的問題錯過了這樣一個事實,即引用位於網站的每個文件中,我希望以遞歸方式在所有文件/文件夾中進行引用。
find -type f -exec perl -pi -e 's/\bindex\.php3\b/index.php/g' {} \;
sed -i 's/php3/php/g' *
假設你正在使用UNIX類操作系統。
還有一個與GNU sed - 這不適用於非GNU版本的sed。 – 2008-11-21 04:07:24
Minor nitpick,@Jonathan - 如今你很難找到沒有GNU sed的UNIX。 – paxdiablo 2008-11-21 04:23:25
找到一個類似Unix的系統,運行PHP,但沒有sed的GNU版本:) – 2008-11-21 04:42:37
如何:
for file in *.php3
do
sed 's/\.php3/.php/g' $file > ${file%3}
done
的供/ DO /完成循環涉及依次在每個.php3文件,編輯文件,並替換.php
每個字符串.php3
,並從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文件名處理的奧祕。
要遞歸執行此操作,請使用Jonathan的答案,但將* .php3替換爲find . -type f
。請注意,反標記很重要,您可以將任何目錄替換爲「。」。 (即當前目錄)。這裏是一個版本,它也會重命名進程中的文件(* .php3 - > * .php)。
#!/bin/bash
for file in `find . -type f`
do
sed 's/\.php3/\.php/g' $file > ${file//3/}
rm $file
done
科莫多有一個特點,要做到這一點。 – 2008-11-21 17:04:40