“移至垃圾箱”或删除选项通常如何将文件复制到垃圾箱文件夹?

“移至垃圾箱”或删除选项通常如何将文件复制到垃圾箱文件夹?

以下是我尝试过的:

  • 如果文件被删除,它将被复制到 Trash/files 文件夹,然后被删除,其信息将存储在 Nautilus 中的 Trash/info 中。
  • 所以我想,如果我将文件设为不可读,它可能不会出现在垃圾箱中,因为它无法复制。但是当我尝试时,它仍然出现在垃圾箱中。
  • 所以我得出结论,它直接将文件移动到垃圾目录。

现在我的问题是,

我正在尝试通过 Python 编程来模仿这种行为。但我想要做的是先进行一些检查,然后在执行 rm 命令之前将文件复制到垃圾箱。

我从用户那里获取 rm 命令字符串,然后进行一些检查并将文件复制到垃圾箱,然后执行 rm 命令。我不想直接将文件移动到垃圾箱。但如果我只是复制文件,它会给出权限被拒绝的错误,因为只有读取权限。如何解决这个问题?有什么解决办法吗?

答案1

我不熟悉 Python。我使用标准 Unix 命令来说明我的想法。请自行翻译成 Python。

在一个足够健全的文件系统中,mv应该是原子的。如果您选择分两步移动文件,即cp+ rm,则需要确保cp在 之前已成功rm。使用 atomicmv不会出现文件完全断开链接或“一半在这里,一半在那里”的风险。

从一个文件系统移动到另一个文件系统mv就像cp+一样rmmv等待复制任务成功后再取消原始文件的链接,但仍然很少有事情会出错。

正如 AFH 所评论的:

要复制文件,您需要能够读取它,但要移动它,您需要对源目录和目标目录具有写访问权限,而无需读取被移动的文件。

没错。但是,有一种方法可以在不读取文件的情况下在单个文件系统内“复制”文件:创建硬链接。确保你理解差异

如果您仍然坚持分两步进行,而不是先尝试cp+ 。当然,您需要确保在 之前工作正常。尝试创建跨设备链接将失败。在这种情况下,您应该返回+ (我认为如果不读取文件,就无法做到这一点)。rmlnrmlnrmcprm

答案2

正如评论中所指出的,这“只是”一个重命名。

但是,将文件放入废纸篓不仅仅涉及移动文件。您还需要以适当的格式将元数据复制到适当的位置,否则无法正确恢复文件。请参阅FD.O/XDG 垃圾规格了解所有发生的情况。请注意,几乎所有东西都使用可选支持将垃圾目录放在可移动媒体的根目录下,正是为了避免尝试删除您无权读取但可以在文件系统上移动的文件时出现问题。

相关内容