web-dev-qa-db-ja.com

大量のファイルを移動する(〜100 000)

フォルダーごとに100,000個、または1,000,000個のファイルなど、多くのファイルを含むフォルダーを操作します。フォルダーのコンテンツを別のフォルダーに移動しようとすると、コンピューターが常に動かなくなります。プロセスが終了したように見えても、nautilusが完全にフリーズしているように見え、コンピューターを強制的に再起動する必要があるため、フォルダーの内容を見ることができません。これは、10,000個のファイルのように移動しようとしたときにも発生することに気付きました。

これは私のコンピューターの問題ですか、それともこれらの番号を使用する場合は正常ですか?

このファイル転送を実行するスマートな方法はありますか?

13
Hyperion

おそらく、非常に大量のファイルを転送するために純粋なコマンドラインメソッドを使用することを検討してください。GUIを使用するよりもプロセスが実質的に速いことは間違いないでしょう。

これを実現するにはさまざまな方法がありますが、私のシステムでは次の方法が迅速、安全、効率的に機能しました。

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

このコマンドの説明:

  1. 入力ディレクトリは「。」ですこの特定のコマンドでは、そのディレクトリにいる必要があります
  2. 出力ディレクトリは、私の例では<destination>です。明らかにこれを自分のニーズに合わせて変更し、括弧を省いてください。
  3. この構文では、ボーナスとしてスペースを含むファイル名を使用できます:)

無限の順列が可能ですが、これはうまく機能し、 guiよりもはるかに効率的です。たとえば、1つの順列: only pdfファイルを移動する場合は、次を実行できます。

find . -iname "*.pdf" -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

xargsを使用すると、特にこのような多数のファイルの移動に関して多くの可能性が開かれます。多くの、多くの可能性....

潜在的な問題:

これらの考えに対する以下のコメント者のおかげで、熟考するために少なくとも2つの潜在的な落とし穴があります:

  1. 宛先ディレクトリが破損している可能性があり、その後に到達できない場所で、タイプミスなどがあります。mvは引き続きファイルをそこに移動します!ここで注意してください...
  2. -tオプション(--target-directory)がなく、宛先フォルダーが実際にファイルである場合、1つのファイルを移動し、残りのファイルで失敗します。 mvには2つの用途があります: rename source to destination or move source to directory 。再び注意してください...
18
andrew.46

以前にも同様の経験がありましたが、多数のファイルを扱う場合は正常です。私はPDFデータシート(電子部品)の大規模なコレクションを持っていました。

GUIツールは、いくつかのファイルの詳細とメタデータ(アイコン/サムネイル、サイズ、...)をチェックします。このような場合は大した問題になります。 Icon Viewでサムネイルがなくても、そのような極端なケース向けに設計されていないため、サムネイルはフリーズします。 GUIツールは、ディレクトリ内のすべてのファイル/フォルダーのプレゼンテーションアイコンをロードしようとしますが、これらのアイテムは現在の画面部分ではユーザーに表示されません。 並べ替えも問題の一部であり、それを回避する方法はありません。

  • 最終的に、ブランド/モデルに基づいてそれぞれ10000未満の個別のフォルダにファイルを分割します。日付(ほとんどの人が写真/スキャンで行うように)または最初の文字( buntuパッケージリポジトリ のように)を使用できます
  • 代わりにCLIツールを使用する方が簡単です。要求されたものだけが表示されるからです。 locateの代わりに、findを使用してクイック検索を行うことができます。
  • 移動操作には、ターミナルでmvを使用します(ビューを定期的に更新しようとするため、GUIツールは遅くなります)。

    同じパーティションにある場合、コマンドはファイルシステムインデックス内のポインタのみを変更します。そうでない場合は、二重操作(コピーと削除)になります。それは高価になります。

これらのファイルを複数回コピーし、更新されない場合、私が助けることができるケースは1つだけです。コレクションを友人と共有したときと同じように、コピーしようとするたびに10年かかります。 (これは小さなサイズのファイルでのみより便利です)

  • 圧縮なし/低圧縮のZipなど、単一のパッケージまたはいくつかのパッケージを作成します。あなたがそれをコピーするとき、それはより速くなるので、 DMA に仕事をさせてください。
4
user.dz

GUIの感覚と柔軟性を組み合わせたコマンドライン操作の利点を提供するソリューションを探している場合は、mcmidnight commander )。

mc commander 2-pane view

Ncursesベースの視覚的なファイルマネージャーです。ファイルの2ペインビューとメニューがあります。 sshを介してもマウスを使用できます。 fsをブラウズし、ファイルビューアーでファイルを検査し、その場で条件に従ってフィルター処理し、コマンドラインでコピーまたは移動操作を実行できます。

これは、DOSプログラムのクローンです ノートンコマンダー は、1980年代半ばに人気がありました。 GUIが私にとって信頼できなくなり、あなたの目的にとって理想的であるときはいつでもうまくいきます。

3
emk2203

似たような問題に遭遇しました-RAIDセットアップをテストしていて、巨大な転送(たとえば、100,000以上のファイルと1-2 TBのデータ)を実行すると、転送がかなり高速に開始されるようです- 〜200MB /秒とすると、すぐに〜90〜120MB /秒の適切なプラトーに急速に減速します(ドライブのフラッシュキャッシュストレージを消費した後)。その後、20〜30分後、操作は徐々に30〜40 MB /秒という非常に低いプラトーに低下し始め、小さなファイルを処理する場合はさらに悪化します。4〜5時間の操作を15時間に近づけます。

診断に時間を費やしました-例えば考えられるドライブ障害。さまざまなツール(コマンドライン、nautilus)を試しましたが、非常に大規模なコピー操作に対して適切なスループットを維持できませんでした。

私にとって最適なのは、真夜中の司令官を使用することであり、コピーが遅くなったときは、保留中の操作がフラッシュされた後、ハードドライブのライトが消えるまで操作を一時停止します-通常1分ほど-その後、MCの一時停止を解除し、さらに20〜30分間、まともなペースに戻ります。むしろ迷惑です。

0
M Szil