移動権限が拒否された場合、MV(1)がオブジェクトをコピーするのはなぜですか?

移動権限が拒否された場合、MV(1)がオブジェクトをコピーするのはなぜですか?

プロセスの移動権限が拒否されたようmvです。cp(1)

それでは、どんなことをうまくやっているのは、ルールに違反するのではないでしょうか?

答え1

短い答えは「いいえ」です。

mvとして定義された:

実行は次のとおりです。rename()機能

rename()コンテンツをコピーせずにディスクから名前を変更します。これは完全に原子的な操作であり、部分的な完了時には決して失敗しません。

しかし、これは全体の話を教えてくれません。この効果はどこにありますか?できるこれは、デバイス間でファイルを移動しようとしたときに発生します。この場合、ファイルシステムで名前を変更することはできません。移動効果を得るには、mvまずソースをターゲットにコピーしてからソースを削除します。実際mv /mnt/a/X /mnt/b/Yには本質的に同じですcp /mnt/a/X /mnt/b/Y && rm /mnt/a/X。これがデバイス間でファイルを移動する唯一の方法です。

mv元のファイルを削除する権限がない場合、エラーは報告されますが、すでにコピーされています。作業中に権限が変更される競合条件がある可能性があるため、事前に権限を確認してもこの状況を回避することはできません。

デバイス間でファイルを完全に移動できない場合を除き、これが発生するのを防ぐ方法はありません。ソースとターゲットの間で選択を許可すると、通常は操作がより単純になりますが、これらのmv異常な状況では奇妙な(しかし非破壊的な)動作が発生します。

これはまた、単一のデバイス内で大容量ファイルを移動することが他のデバイスに移動するよりもはるかに速い理由です。

関連情報