大量のファイルを画像ファイルをアップロードする必要があって、
いろいろ試して結局アップロードできそうなので、ここにメモ。
課題
・何十万件かあるファイルをアップロード!どうしよう!
・ローカル側はWindows。リモート(サーバ)側はLinux
・ホスティングサーバだからCDやらUSBメモリやらで直接コピーはできない
・わかっちゃいるけどやめられない
解決策
Aプラン:とにかく一個一個アップロードする
詳細:FFFTPでローカルとリモート側をリスト表示してアップロード
結果:×。途中でファイル名のリスト表示すらできなくなる。
時間もかかる。
Bプラン:サーバ側に一次フォルダを作成し、何千件かずつ順番に上げる
詳細:FFFTPとlinuxのコマンドを使って、がんばる
アップ→サーバ内ファイル移動→アップ→サーバ内ファイル移動→…を繰り返す
結果:×。手間がかかりすぎる!半泣き!途中で停止。
Cプラン:圧縮→アップ→解凍
詳細:ローカルでLhaplus等でZIP形式圧縮し、アップロードしてからunzipで解凍!
結果:?。未確認。FTPがタイムアウトしてしたり、
途中で回線が切れたりするのではないか、という説もあり実験せず。
Dプラン:1ファイルずつアップロードするバッチ作成!
詳細:DOSのdirコマンドでリスト作成して、一個一個アップするバッチを作る
結果:???。実施せず。めんどくさそうだったので。
Eプラン:フォルダに小分けしてアップロードしてから目的フォルダにコピー
詳細:これは有効っぽいので、より細かくメモ。
格納一発
というソフトがあるので、
これを使って1000とか2000くらいずつ小分けフォルダに格納する。
その後、filezillaというFTPクライアントで
各フォルダをアップロードする
(この進め方だと、いちいちファイルリストを表示しないので快適で、
途中で接続が切れたら再接続してくれたり、便利)。
で、あらかじめ
dosのdirコマンドを使うか[http://www.download32.com/file---folder-list-maker-i36783.html:title=
file&foldermaker]で
フォルダのリストを作っておいて、
アップロードした先のlinux(ちなみにcentOS 5.X)側で
上書き確認せずにコピー。
コピー時のlinux側のコマンドはこんな感じ
$\cp -f /home/hoge/photo/photo0001/G*.jpg /var/www/html/photo/
$\cp -f /home/hoge/photo/photo0002/G*.jpg /var/www/html/photo/
・
・
・
$\cp -f /home/hoge/photo/photo9999/G*.jpg /var/www/html/photo/
(円マークはバックスラッシュです念の為)
- fオプションで上書き確認しないでコピー。
filezillaを使えば、わざわざ小分けにする必要もないかも?
という話もありつつ、とりあえずこれでできたよ。ということでメモ。
ついでに書いておくと、最後のコピーするコマンドは、
3万行くらいまでならエクセルで対応。
エクセルの3行目以降のA列に
フォルダ名をコピペして、
D1のセルに「$\cp -f /home/hoge/photo/」
E1のセルに「/var/www/html/photo/」
を書いてから、
Bの列の3行目あたりから
「=$D$1&A3&$E$1」
を指定して、
下の方までコピー。
↑こういうでたらめなエクセルの使い方をよくやります。