1

Typo3 Web サイト (LAMP) を knopix サーバーから ubuntu 10.04 マシンに移行しました。現在、サイトの半分は機能していますが、もう一方は機能していません。私は問題を見つけたと思いますが、それを解決することはできません。数学が十分ではないため、適切な正規表現を行うことができます。

新しいサーバーでは、ファイルは「/var/www/cms」にあります。古いサーバーでは、/media/sda3/www/quickstart-4.2.1/ にファイルがありました。

「/media/sda1/www/quickstart-4.2.1/」文字列を含むサブディレクトリを含む「/var/www/cms」にあるすべてのファイルを「/var/www」に置き換えると思います/cms" サイトは正常に動作します。

この unix 初心者は、助けていただければ幸いです。前もって感謝します!

B

4

2 に答える 2

0

これには正規表現が必要ないようです。
これは、任意のテキスト エディターで実行できる通常の文字列の検索/置換です。多くのテキスト エディタは、開いている 1 つのファイルを検索/置換するだけでなく、ホール ディレクトリを検索することもできます。jEditをよく使う

また、ファイルをサーバー上で直接編集するのではなく、ローカル コピーを使用して作業し、修正後にファイルを転送する方がはるかに簡単です。

于 2011-04-05T11:13:53.033 に答える
0

検索ベースのパイプラインはあなたの友達です。この回答は、Linux/Unix ベースの OS を想定しています。

各コマンドを一度に 1 つずつ切り取り、コマンド ラインに貼り付けることを強くお勧めします。経験を積むまで、これをシェル スクリプトに変換しようとしないでください。各ステップが何をしているのかを理解し、結果が本当にあるべきものであることをトリプルチェックすることを確認してください;-!)

# 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' で終了できるという利点があります。

重要 一部のシェルや ex コマンドでは、この種の構造に問題があります。そのため、バックアップされた 1 つのファイルでテストしています。続行する前に、ファイルに問題がなく、バックアップ ファイルが配置されていることを確認してください。

# 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 か月後に todo リストにメモを作成し、戻って 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 に答える