存取從 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在我的.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年似乎實現完全相容的路還很長。

相關內容