从 WSL 访问下载的文件

从 WSL 访问下载的文件

问题

要访问最近下载的文件,我需要:

  • 导航至 Windows 下载位置
  • mv文件返回到 WSL 主位置

我尝试过的方法

  • 在 Chrome 中更改下载位置:这不直观,因为我看到的是 Windows 风格的文件路径C:\。不清楚如何提供基于 Linux 的文件路径home/geoff

问题

有没有更简单的方法来访问最近下载的文件?

答案1

今天遇到的一个老问题,所以又提出了一个新答案。

其他答案各自都存在一些问题,在我看来,这些问题使得它们对于所问的问题来说不是最优的:

有没有更简单的方法来访问最近下载的文件(来自 WSL)?

在我看来,最简单的方法就是在 WSL 中创建一个指向 Windows 下载文件夹的符号链接:

ln -s /mnt/c/Users/<windows_username>/Downloads ~/downloads

然后,您可以直接在 WSL 中的文件夹中访问所有 Windows 下载~/downloads

注意:我不鼓励使用其他(当前)答案的原因:

  • 移动文件事后执行并不是一个坏选择,但这只是多了一个步骤。而且,正如所写,它只适用于最近下载的文件。如果您要下载多个文件,则必须在每次下载后手动执行。

  • 我想为我最近在@harrymc 的回答。我肯定没有仔细阅读。此路径 (a) 仅在 WSL1 中可用,但即便如此 (b) 也不应该使用,因为它可能会导致文件系统损坏

  • 更改默认下载位置在浏览器中当然可以,而且我确实赞赏使用 Vivaldi 的良好品味,但大多数用户可能不想下载全部文件到 WSL,只有少数。

    还请注意,从 Vivaldi 直接下载到文件夹(根据个人经验)有一个有趣的副作用。当 Vivaldi(也许还有其他浏览器,但我不确定)启动时,它会扫描最近下载的文件列表,并且实际上似乎对它们执行了某种类型的“读取”操作。如果有一个文件直接下载到路径\\wsl.localhost\<distro>,则访问该文件将导致 WSL 发行版本身启动。

    我注意到这一点的唯一原因是我debugShell=true在我的 中设置了(现已弃用的)WSL 选项.wslconfig。这会导致每次 WSL 启动时都会打开一个调试窗口。我花了几天时间才弄清楚为什么 WSL 会在我重启电脑后不久启动 ;-)。

答案2

有没有更简单的方法来访问最近下载的文件?

解决方案

  • 我们可以找到 WSL 翻译的 Windows 下载路径
  • 将最近的下载移动到当前位置

将此函数添加到 .zshrc 或 .bashrc

getRecentDownload() {
    windowsDownloadsLocation="/mnt/c/Users/<your_username>/Downloads"
    fileNameRecentDownload=$(ls -Art $windowsDownloadsLocation | tail -1)
    mv "$windowsDownloadsLocation/$fileNameRecentDownload" .
}

如何使用

  • source仅第一次使用时需要
geoff@DESKTOP-DSQFUUU:~$ source ~/.bashrc
geoff@DESKTOP-DSQFUUU:~$ getRecentDownload

答案3

我喜欢如上所述创建 shell 函数的想法,但也可以将默认下载文件夹设置为:

\\wsl.localhost\DISTRIBUTION\home\USERNAME\Downloads

至少,这对于我在 Vivaldi(类似 Chrome 的浏览器)上来说是有效的。

答案4

警告:尽管 Windows 实用程序可以轻松地将文件下载到 WSL 文件夹中,但请不要尝试直接下载到这些文件夹(位于 下)%LOCALAPPDATA%\Packages

微软文章 不要使用 Windows 应用和工具更改 Linux 文件 解释说 WSL Linux 使用自己的元数据,而不是 Windows 的有关文件的信息。这意味着使用 Windows 创建的文件很可能会在 Linux 中显示为空文件且没有权限。

微软一直致力于 Windows 和 WSL Linux 的相互兼容,但 2023 年距离完全兼容似乎还有很长的路要走。

相关内容