mv
を実行します cp(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
を許可する選択 送信元と宛先の間では、一般的なケースでは物事が簡単になりますが、これらの異常なケースでは奇妙な(ただし非破壊的な)動作が犠牲になります。
これは、単一のデバイス内で大きなファイルを移動する方が、別のデバイスに移動するよりもはるかに高速である理由でもあります。