検索ベースのパイプラインはあなたの友達です。この回答は、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、あなたは新しいユーザーのようです。役立つ回答が得られた場合は、承認済みとしてマークすることを忘れないでください。また、有用な回答として + (または -) を付けてください。