アクセス許可を保持せずにファイルを移動する方法


42

問題は、ファイルを移動するときにエラーを表示できるようにしたいが、権限の問題ではエラーが表示されないようにすることです。言い換えれば、ファイルが完全に送信されないかどうかは気になりますが、次のようなエラーは見たくありません。

mv: `/home/blah/backup/pgsql.tar.gz 'の所有権を保持できませんでした:操作は許可されていません

だから私のような何かをしたいです:mv $backupfile $destination --ignore-permissions

バックアップファイルは1 MiBから5 GiBの任意のもので、NFSを介して転送されます。


接続されたNTFSデバイスでも発生しますが、これが唯一のケースではありません。許可を変更する権限がない場合や不可能な場合(NTFSの場合など)、すべての場合に発生します。
Nux 14年

これは、アクセス許可エラーのために(たとえば、ファイルがマウントされているためcifs)何らかの理由で移動されないファイルを移動しようとする場合に便利です。
スリダールサルノバト

回答:


56

mvこの仕事には間違ったツールです。あなたが欲しいしcp、その後rm。ファイルを別のファイルシステムに移動しているのでmvmvファイル許可ビットと所有者/グループ情報を保存しようとしていることを除いて、これはとにかく舞台裏で行われていることです。これはmv、同じファイルシステム内でファイルを移動し、mv両方の状況で同じように動作しようとすると、その情報が保持されるためです。ファイル許可ビットと所有者/グループ情報の保存を気にしないので、そのツールを使用しないでください。代わりにcp --no-preserve=modeand rmを使用します。


5
おかげで、それは動作します。終了:cp --no-preserve=mode,ownership $backupfile $destination終了コードを確認してからrm $backupfile、すべてが正常に終了したら実行します。
木の実

22

同じファイルシステム内でファイルを移動すると、ファイルmvは古い場所から切り離され、新しい場所に添付されます。権限などのメタデータは変わりません。ファイルを別のファイルシステムに移動すると、ファイルをmvコピーし、可能な限り多くのメタデータを複製しようとし、元のファイルを削除します。

別のファイルシステムに移動していて、多くのメタデータを複製したくないので、ファイルをコピーしてから元のファイルを削除することもできます。

cp "$backupfile" "$destination" && rm "$backupfile"

これにより、ファイルのパーミッションがある程度保持されます(例:世界の読みやすさ、実行可能性)。ファイルの変更時刻は保持されません。ではGNUcpは、使用することができます--preserve=…例えば、メタデータをより細かく複製されているものcontolするオプションを--preserve=mode,timestamps

rsync保存したいものを使用して伝えることもできます。このオプション-aは「ほとんどのメタデータを保持する」ことを意味し、ルートとしてのみ実行されている場合は所有者が含まれます。

rsync -a --no-owner --no-group --remove-source-files "$backupfile" "$destination"

rsync解決策は見事に動作します。私は古いubuntuのインストールをCIFS共有から移そうとして苦労していました。私のrsyncはファイルの移動に失敗したことを報告しませんでしたが、ファイルを移動せず、アクセス許可の問題のみを報告していました。
スリダールサルノバト

rsync解決のために+1 !
-MikeSchinkel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.