かなり大量のデータ(20 GB以上)を1つのディレクトリツリーから別のディレクトリツリーに移動しています。多くの場合、同じファイルシステム上にありますが、異なるファイルシステム上にある場合もあります。元のデータを保持するためだけにcp
を行います。コピーが完了したら、データが正しくコピーされたことを確認してから元のデータを削除します。後で元のデータをクリーンアップするのが面倒すぎる場合は、mv
を実行することがあります。しかし、純粋に技術的な観点から、どの操作の方が効率的ですか?どうして?
技術的には、ソースと宛先が異なるファイルシステムにある場合、mv
はアトミックではなく、実際にはcp
+ unlink()
です。したがって、最初にmv
はファイルをコピーし、次にunlink()
を呼び出して、ディレクトリのエントリリストからファイルを削除します。
したがって、この場合、AFAIUはcp
を使用してからrm
(unlink()
)を使用するか、mv
を直接使用するかは、完全に個人的な好みです。
一方、同じファイルシステム内でmv
-ingしている間は、同じファイルシステム内でmv
をアトミックとして使用する必要があるため(rename()
を呼び出す)、オーバーヘッドが少なくなります。
@ muruと@psusi、FS依存する動作を指摘してくれたことに感謝