- 締切済み
大量のファイルをCDからコピー
CDの中の1つのフォルダに5万個のファイルがあります。 GUIでHDDにコピーしましたが、あまりにも遅過ぎるので途中で止めました。 プログレスバーが全く進まないし、熱で壊れそうなので途中で止めましたが、いくつかのファイルはコピーできていました。 1つのファイルは平均200kBです。 日本語、大文字が無いので、 0から始まるファイルのコピー 1から始まるファイルのコピー ・・・・・・・ zから始まるファイルのコピー というように36分割すれば、1回で1400ファイルぐらいのコピーになるから早くできそうです。 考えはしましたが、これを自動化する方法が分からないし、他にもっとよい方法がございましたら教えてください。 Linuxの普通の操作でさえ困難なほどの知識しかありません。 マウントはやったことがありません。 初心者向けの方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- oldroot2005
- ベストアンサー率66% (68/103)
No.2 に補足と訂正です(No.3 の回答で答えは出ているのかも知れませんが、キモチ悪いので)。 補足: > $ tar -cvf - . | (cd /home/hoge/fuga ; tar -xvf -) もっと単純に、cp -r . /home/hoge/fuga という方法もあります。コピー元にディレクトリが指定できるかどうか、マニュアルで確認してみてください。 訂正: > $ find . -name '0*' -cpio | (cd /home/hoge/fuga ; cpio オプション) これは記憶違いでした。正しくは、 find . -name '0*' -print | cpio -o | (cd /home/hoge/fuga ; cpio -idv) です。
抜本的な改善策はひとつ。 FDとかCD-ROMなどの遅い回転メディアでは 転送速度以上にシーク速度の遅さが目立つ…ゆえに シーケンシャルアクセスだけするのが最速のアクセス方法。 つまり、CD-ROMをそのままイメージファイルにして dd if=/dev/hdc of=~/cdrom.img できたイメージファイルをループバックデバイスとして マウントするためのディレクトリーを作り mkdir ~/cdromimage そこに実際にマウントする。 mount -o loop ~/cdrom.img ~/cdromimage これで、ls ~/cdromimageすると CD-ROMの最上ディレクトリーが再現される。 なお、~/はホームディレクトリーを表す特殊文字。 ディレクトリー構造をそのまま利用する用途なら そのまま使ってもいいし 通常のHDD領域に、改めてコピーしても良い。 そういえば、数年前にDIRECTORで作成された ある種のCDカタログがあって ビッグサイトでのカタログビュワー作者らとの雑談では 「CD-ROMドライブが壊れる」とまで言われていた。 CDイメージ化は無駄もあるけど、結果的には CD-ROMドライブの消耗を抑える効果も得られる。 この程度のマウント操作は、基本のうちだから それが無理ならWindowsで市販仮想CD-ROMソフトとか買う手もある。
- oldroot2005
- ベストアンサー率66% (68/103)
その GUI ソフトの出来にもよりますが、ファイルのコピーに要する時間は、CD と HDD の転送速度に依存するので、ファイル群を 36 分割しても、トータルでかかる時間はほとんど変わらないと思います。 それでも他の方法を試したいのなら、他のソフトを探して使うか、Linux 標準のコマンドを使うことになります。 なお、No.1 の回答に > $ cp * /home/hoge/fuga とありますが、引数の個数(多分 255 か 256)とコマンド行の長さ(確か1000 文字ぐらい)に制限があるので、5 万個のファイルでは、制限に引っかかって実行できません。1400 個でも無理です。 方法はいくつか考えられますが、例えば、 $ cd /mnt/cdrom/(目的のファイルのあるディレクトリ) $ tar -cvf - . | (cd /home/hoge/fuga ; tar -xvf -) という風にしてみてください(画面にコピーされるファイル名を表示しながらコピーが進みます)。いきなりやらないで、少ないファイルでテスト用のコピー先ディレクトリを使って、テストしてくださいね。 もし、 > 0から始まるファイルのコピー > 1から始まるファイルのコピー > ・・・・・・・ とするなら、tar の代わりに、 $ find . -name '0*' -cpio | (cd /home/hoge/fuga ; cpio オプション) というのが考えられるのですが、cpio の「オプション」がどうすればよかったか、今思い出せません。マニュアルで確認してください。確か -ov か何かだったように記憶しているのですが…。
- goooopon
- ベストアンサー率53% (7/13)
この際、shellになれましょう。 マウントは、おそらく $ mount /mnt/cdrom でできるはずです。 で、その後、 $ cd /mnt/cdrom/(目的のファイルのあるディレクトリ) $ cp * /home/hoge/fuga * はワイルドカードといって、まあ七並べでいうジョーカーみたいなものです。 たとえば、 $ ls foo foo1 foo2 goo goo2 というファイルがあったとすると $ ls *2 foo2 goo2 $ ls goo* goo goo2 ってかんじになります。