1

うまくいけば、素敵なシンプルなものです。

PHP 5.2で実行したいphp3 Webサイトを持っています

まず、現在の "index.php3" _within_each_file_ へのすべての参照を (再帰的に) "index.php" に変更してから、グローバルなどの心配に移りたいと思います。

K. 行け!

:)

更新:どうもありがとう!私の質問では、参照が Web サイトの各ファイルにあるという事実を見逃しており、すべてのファイル/フォルダーで再帰的に実行したかったことに気付きました。

4

4 に答える 4

5
find -type f -exec perl -pi -e 's/\bindex\.php3\b/index.php/g' {} \;
于 2008-11-21T06:29:37.863 に答える
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 のファイル名処理の奥深さを深く掘り下げる必要があるかもしれません。

于 2008-11-21T04:05:23.770 に答える
2

sed -i 's/php3/php/g' *

UNIX ライクなオペレーティング システムを使用していると仮定します。

于 2008-11-21T04:04:07.720 に答える
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
于 2008-11-21T05:49:16.730 に答える