問題は、ファイルを移動するときにエラーを表示したいが、権限の問題に関するエラーは表示したくないことです。つまり、ファイルが完全に送信されていないかどうかは気になりますが、次のようなエラーは表示したくありません。
mv:「/home/blah/backup/pgsql.tar.gz」の所有権を保持できませんでした:操作は許可されていません
だから私は次のようなものが欲しい:mv $backupfile $destination --ignore-permissions
。
バックアップファイルは、1 MiBから5までの任意の値にすることができますGiBで、NFSを介して転送されます。
mv
は、このジョブには不適切なツールです。 cp
が必要で、次にrm
が必要です。ファイルを別のファイルシステムに移動しているので、これはmv
がファイルの許可ビットと所有者/グループ情報を保持しようとしていることを除いて、とにかく裏でmv
が行っていることです。これは、mv
が同じファイルシステム内でファイルを移動していて、mv
が両方の状況で同じように動作しようとすると、その情報が保持されるためです。ファイル許可ビットと所有者/グループ情報の保持を気にしないので、そのツールを使用しないでください。使用する cp --no-preserve=mode
およびrm
代わりに。
同じファイルシステム内でファイルを移動すると、mv
はファイルを古い場所から切り離し、新しい場所に接続します。権限などのメタデータは変わりません。ファイルを別のファイルシステムに移動すると、mv
はファイルをコピーし、できるだけ多くのメタデータの複製を試み、元のファイルを削除します。
別のファイルシステムに移動していて、あまり多くのメタデータを複製したくないので、ファイルをコピーしてから元のファイルを削除することもできます。
cp "$backupfile" "$destination" && rm "$backupfile"
これにより、ファイルの権限がある程度保持されます(例:世界中の読みやすさ、実行可能性)。ファイルの変更時刻は保持されません。 GNU cp
を使用すると、--preserve=…
オプションにより、どのメタデータをより細かくレプリケートするかを制御できます。 --preserve=mode,timestamps
。
rsync
を使用して、何を保存するかを指定することもできます。オプション -a
は、「ほとんどのメタデータを保持する」ことを意味し、rootとしてのみ実行されている場合の所有者も含まれます。
rsync -a --no-owner --no-group --remove-source-files "$backupfile" "$destination"