問題
要存取最近下載的文件,我需要:
- 導覽至 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年似乎實現完全相容的路還很長。