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