web-dev-qa-db-ja.com

cp対mv:より効率的な操作はどれですか?

かなり大量のデータ(20 GB以上)を1つのディレクトリツリーから別のディレクトリツリーに移動しています。多くの場合、同じファイルシステム上にありますが、異なるファイルシステム上にある場合もあります。元のデータを保持するためだけにcpを行います。コピーが完了したら、データが正しくコピーされたことを確認してから元のデータを削除します。後で元のデータをクリーンアップするのが面倒すぎる場合は、mvを実行することがあります。しかし、純粋に技術的な観点から、どの操作の方が効率的ですか?どうして?

5
mkc

技術的には、ソースと宛先が異なるファイルシステムにある場合、mvはアトミックではなく、実際にはcp + unlink()です。したがって、最初にmvはファイルをコピーし、次にunlink()を呼び出して、ディレクトリのエントリリストからファイルを削除します。

したがって、この場合、AFAIUはcpを使用してからrmunlink())を使用するか、mvを直接使用するかは、完全に個人的な好みです。

一方、同じファイルシステム内でmv -ingしている間は、同じファイルシステム内でmvをアトミックとして使用する必要があるため(rename()を呼び出す)、オーバーヘッドが少なくなります。

@ muruと@psusi、FS依存する動作を指摘してくれたことに感謝

12
heemayl