私の状況は非常に厄介です。私は62GBのRAMを搭載したRHEL-7コンピュータを使用しています。このコンピュータには、約800万のファイルを含む複数のフォルダがあります。
残念ながら、このフォルダで作業するのは難しいです。私はファイルのリストのような基本的なタスクを実行するのが非常に遅いことがわかりました。
たとえば、ls -l ~/large_directory | head -5
時間がかかります。
コピーコマンドの問題はより深刻です。このフォルダから別のフォルダにファイルをコピーする必要があります。一般的なコピーコマンドcp ~/large_directory/*.js /processing_directory/
も機能しません。xargs
それとも似たようなものを使うべきだと思います。
どんな意見でも感謝します。
答え1
読んで、man find xargs cp
次のことをしてみてください
find ~/bigdir -type f -name '*.js' -print0 | \
xargs -0 -r echo cp --target-directory=~/destination
echo
結果がうまくいけば、 ""を削除してください。
答え2
こういう時、ミッドナイト・コマンダーはもっと快適に作業できるようにするツールだと思います。 lessと同様に、ストリームを使用してファイルを一覧表示するので、理論的にはできるだけ良いパフォーマンスを持っています。
また、ファイルをコピーする前に使用できるように、「フィルタ」機能も提供します。ファイルの視覚化が簡単になるため、ファイルを繰り返し表示する必要はありません。さらに、表示/編集機能を使用すると、フォルダを再リストすることなくファイルを開いて編集できます。
答え3
これだけ投げる…
同様の操作を実行するシェルスクリプトにはどのような問題がありますか?
tar -cf newdir/a/a.tar /hugedir/a*
tar -cf newdir/b/b.tar hugedir/b*
または、そのようなもの、
cd hugedir/
mkdir a
mkdir b
ln -s a* ./a/
ln -s b* ./b/
もう1つのアイデアは、ソート順ではなくディスク順に各ファイルに対して機能する論理リスト/ループ、または比較ロジック(対応する言語でサポートされているすべてのもの)を渡すことができるPythonやbashなどの言語を使用することです。はい、スクリプトメソッドは各ファイルにアクセスするため、時間がかかりますが、一度だけ実行されます。
このように大量のファイルを使用するには、より小さな塊にソートする非常に簡単な方法が必要です。
個人的には、私はこれらのファイルが何であるのか疑問に思い、他の人も疑問に思うと確信しています。
答え4
cpio
パススルーモードは非常に効率的で、多くのファイルを含む大規模なディレクトリツリーで広く使用されています。
$ find /bigdatadir -print | cpio -pdm /newbigdatadir