うさみ日記

東京都日野市からまいりました宇佐見直人です。ITとかマーケとかの話や、勉強した話なんかをするよ。

ファイル数が途方もなく多いFTPアップロード。たまには仕事っぽい話

大量のファイルを画像ファイルをアップロードする必要があって、
いろいろ試して結局アップロードできそうなので、ここにメモ。

課題

・何十万件かあるファイルをアップロード!どうしよう!
・ローカル側はWindows。リモート(サーバ)側はLinux
ホスティングサーバだからCDやらUSBメモリやらで直接コピーはできない
・わかっちゃいるけどやめられない

解決策

Aプラン:とにかく一個一個アップロードする

詳細:FFFTPでローカルとリモート側をリスト表示してアップロード
結果:×。途中でファイル名のリスト表示すらできなくなる。
時間もかかる。

Bプラン:サーバ側に一次フォルダを作成し、何千件かずつ順番に上げる

詳細:FFFTPlinuxのコマンドを使って、がんばる
アップ→サーバ内ファイル移動→アップ→サーバ内ファイル移動→…を繰り返す
結果:×。手間がかかりすぎる!半泣き!途中で停止。

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」
を指定して、
下の方までコピー。

↑こういうでたらめなエクセルの使い方をよくやります。