バックアップしたファイルを1個づつリストアする

ファイルを1つづつコピーするShellを作って実行する。

狙い

  • リストア先は不正なファイルがある可能性があるので完全に削除した空っぽにする
  • サーバー負荷が上がるとこに神経質になっているので出来るだけ低負荷で行う
  • もしリカバリ作業中に問題が発生する兆候があったらコピーをすぐにリストアを中断する

$ for f in `find uploads/ -type f` ;do echo “cp –parents” “${f}” “mydomain/public_html/wp-content/”; done

出力例
cp –parents uploads/2010/08/290833-100×100.jpg mydomain/public_html/wp-content/
cp –parents uploads/2010/08/290833-150×150.jpg mydomain/public_html/wp-content/
cp –parents uploads/2010/08/290833-300×225.jpg mydomain/public_html/wp-content/

出力結果をファイルに保存。リストアしたくないファイルがあれば削除する。

例)mydomain_uploads.sh
#/usr/bin/bash
cp –parents uploads/2010/08/290833-100×100.jpg mydomain/public_html/wp-content/
cp –parents uploads/2010/08/290833-150×150.jpg mydomain/public_html/wp-content/
cp –parents uploads/2010/08/290833-300×225.jpg mydomain/public_html/wp-content/

ちょっと見慣れないcpコマンドのオプション。コピー元のファイルをディレクトリ付きでコピーしてくれる。

CP(1)
–parents
use full source file name under DIRECTORY

サーバーに負荷をかけないように実行の優先を下げて実行する。いつでもctrl+cで中断できる。
$ nice -n 19 ./mydomain_uploads.sh
コピーには時間がかかるかもしれないので、別Termをあげて定期的にコピーされたファイルの数を表示させる。Shellの行数を比較すればどこまで進んでいるのか検討がつきます。
$ while(true); do find mydomain/public_html/wp-content/ -type f | wc -l;sleep 30; done