我刚刚在装有 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
什么也没做,因为:- 该
gvfs
软件包在 WSL 下的 Ubuntu 中未默认安装。 - 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 实例启动。
如果您不想这样做,那么当然, an
rm -rf ~/.local/share/Trash/files/*
本质上会产生相同的效果,即不使用gio
、gvfs
或dbus
。并且,如果您愿意,您可以为其添加别名或编写函数以使其更容易。- 该
可以
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 完成。我猜这是因为垃圾文件可能不止有当地的文件。