在 WSL 中删除文件并清空垃圾

在 WSL 中删除文件并清空垃圾

我刚刚在装有 Windows 11 的电脑上安装了 WSL。

我想从在 WSL 中运行的 Ubuntu 20.04 中删除文件。

我做到了:

gio trash someFile

它进入了 .local/share/Trash/files。

如果我执行 gio trash --empty,它不会清空已删除的文件。无论如何都要这样做?我必须为 创建一个自定义别名吗rm -rf .local/share/Trash/files/*

我可以使用 gio trash 将文件发送到 Windows 垃圾箱吗?

此外,当我将文件从 Windows 复制到 Ubuntu 时,我得到了一个 zone.Identifier 文件...它们是正常的吗?我可以删除它们吗?

此致

答案1

提醒一下,我删除了之前的答案,因为 (a) 缺少一些对这项工作至关重要的信息,(b) 无论如何,我找到了一种更简单的方法让垃圾工作,以及 (c) 我原来的答案没有完全解决你的问题。这是一次彻底的重写。

您的帖子中似乎有三个主要(有点相关)的​​问题,以及几个隐含的问题:

  • 有没有办法gio trash --empty清空垃圾箱?

    我首先会解释为什么它不能与 WSL 开箱即用。

    gio部分功能依赖于 Gnome 虚拟文件系统 (GVfs),而后者又依赖于用户会话 D-Bus,而后者又通常由 Ubuntu 下的 Systemd 启动。最终,它gio trash --empty什么也没做,因为:

    1. gvfs软件包在 WSL 下的 Ubuntu 中未默认安装。
    2. Systemd 无法(轻易)在 WSL 下运行,因此 D-Bus 从未启动。

    (注:请参阅最后的脚注以了解其为何gio trash filename有效)

    如果您想启用该功能,您可以:

    • 使用 安装 GVfs sudo apt install gvfs。请注意,我之前的回答没有此信息,因为我已经将其作为另一个包的依赖项安装了。如果没有 GVfs,之前的回答可能对您不起作用。

    • 安装 GVfs 后,您可以使用以下命令行运行 WSL:

      wsl dbus-launch --exit-with-session bash # or tmux, or whatever shell you prefer
      

    垃圾箱应该可以正常工作,包括gio list Trash://,至少对于本地文件来说。

    如果您愿意,可以更改 Windows 终端配置文件以使用该命令行。这样,它将始终从您的 WSL 实例启动。

    如果您不想这样做,那么当然, anrm -rf ~/.local/share/Trash/files/*本质上会产生相同的效果,即不使用giogvfsdbus。并且,如果您愿意,您可以为其添加别名或编写函数以使其更容易。


  • 可以gio将 WSL/Linux/Ubuntu 文件发送到 Windows 回收站吗?如果不行,还有其他方法可以将 WSL 文件发送到 Windows 回收站吗?

    对于第一部分,我只想说,“不,gio无法将文件发送到 Windows 回收站。”从技术上讲,我相信可以如果有人编写了 GVfs 模块来管理它,那么它就不存在。但是,由于不存在这样的模块,而且你我(可能还有其他人)可能都没有编写这样的模块的打算,所以我们就称之为“没有”。

    至于使用其他方法从 WSL 将文件发送到 Windows 回收站,我能想到两种可能性:

    • 正如 harrymc 在评论中提到的,您可以运行第三方工具将文件移动到 Windows 回收站。链接的 Reddit 帖子提到recycle.exe

    • 通过在 WSL 中运行的 PowerShell 脚本来执行此操作也应该相对轻松,如这个 Stack Overflow 问题。完全可以通过 shell 函数或别名在 WSL 中实现此功能。

      我可能会把它作为一个副项目回来亲自尝试,但现在我必须把它留给别人作为练习。

    对于这两种技术,请注意,对于任何不在当前目录中的文件,基于 Windows 的工具都需要从 Linux 到 Windows 的路径转换。这可以使用 WSL 内置的 wslpath 工具来完成。例如:

    recycle.exe "$(wslpath -w <directory>/<filename)"
    

  • 什么是 Zone.Indentifier 文件?删除它们安全吗?

    由于这涵盖超级用户已在此提问,我打算让你去那里看看。不幸的是,它没有任何答案,但至少 OP 对文件做了一些研究。我自己从未能够重现这种行为。你是否像那个问题的 OP 一样使用 GWSL?


脚注

我确实觉得有点奇怪,虽然gio trash filename可以工作(将文件移到垃圾箱),但gio trash --empty不起作用,所以我深入研究了吉奥源一点点。

据我所知,如果文件是本地文件,它只会对文件进行简单的重命名,将其放置在正确的垃圾目录中。这不需要使用正确的 gvfs。

但是,清空垃圾文件显然可以通过 gvfs/dbus 完成。我猜这是因为垃圾文件可能不止有当地的文件。

相关内容