问题是我希望在移动文件时能够看到错误,但看不到权限问题的错误。换句话说 - 我关心文件是否没有完全传输,但不想看到这样的错误:
mv:未能保留`/home/blah/backup/pgsql.tar.gz'的所有权:不允许操作
所以,我想是这样的:mv $backupfile $destination --ignore-permissions。
备份文件可以是 1 MiB 到 5 GiB 的任何大小,并通过 NFS 传输。
Kyl*_*nes 78
mv是这项工作的错误工具;你想要cp然后rm。由于您将文件移动到另一个文件系统,这正是mv幕后所做的事情,除了mv它还试图保留文件权限位和所有者/组信息。这是因为mv如果它在同一文件系统中移动文件并mv尝试在两种情况下以相同的方式运行,则会保留该信息。由于您不关心文件权限位和所有者/组信息的保留,因此请不要使用该工具。使用cp --no-preserve=mode和rm代替。
Gil*_*il' 28
当您在同一文件系统中移动文件时,mv将文件从其旧位置分离并将其附加到新位置;元数据(例如权限)保持不变。当您将文件移动到不同的文件系统时,mv复制文件,尝试复制尽可能多的元数据,然后删除原始文件。
由于您要迁移到不同的文件系统并且不想复制太多元数据,因此您不妨复制文件然后删除原始文件。
cp "$backupfile" "$destination" && rm "$backupfile"
Run Code Online (Sandbox Code Playgroud)
这在一定程度上保留了文件的权限(例如世界可读性、可执行性)。不保留文件的修改时间。使用GNUcp,您可以使用该--preserve=…选项来控制更精细地复制哪些元数据,例如--preserve=mode,timestamps.
您还可以使用rsync并告诉它您想要保留的内容。该选项的-a意思是“保留大部分元数据”,如果仅以 root 身份运行,则包括所有者。
rsync -a --no-owner --no-group --remove-source-files "$backupfile" "$destination"
Run Code Online (Sandbox Code Playgroud)