
我在 Windows 7 64 位元 PC 上安裝了 Cygwin,並且經常使用 wget 下載大檔案。然而,wget 保存的所有檔案都具有禁止我執行 Windows 執行檔(.exe 或 .msi)的權限。有什麼方法可以讓我設定權限以便我可以自動執行這些文件嗎?我還可以更改保存它們的預設目錄嗎?目前它們已保存到 cygwin 資料夾中C:\cygwin64\home\Brenton
,我想將它們保存到C:\Users\Brenton\Downloads
.
為了清楚起見,我知道如何在保存這些文件後手動將它們移動到我想要的目錄(例如,使用:
mv filename C:\Users\Brenton\Downloads
其中 filename 是需要傳輸的檔案名稱),我知道如何透過以下方式手動變更權限:
chmod 755 filename
但我想要的是一種自動方式,以便從此以後透過 wget 下載的所有檔案都將以我的首選權限下載到我的首選目錄。
答案1
目的地目錄
您可以使用-P prefix
/--directory-prefix=prefix
選項直接wget
儲存到某個目錄。
將目錄前綴設定為
prefix
.目錄前綴是所有其他檔案和子目錄將保存到的目錄,即檢索樹的頂部。預設為.
(目前目錄)。
將單一檔案儲存到下載目錄的範例:
wget -p $(cygpath -u "C:\Users\Brenton\Downloads") http://host.name/setup.exe
文件權限
在我的系統上,umask
設定為0022
這樣當我用於wget
將檔案下載到我的 Cygwin 主目錄時,檔案具有-rw-r--r--
預期的權限。
但是,如果我下載到 WindowsDownloads
目錄,則會設定可執行權限。我不確定為什麼,但我懷疑權限在某種程度上受到 NTFS ACL 的影響。此行為也可能對您的系統有利。如果是這樣,您可以使用簡單的 shell 別名,例如:
alias wget-exe='wget -P $(cygpath -u "C:\Users\Brenton\Downloads") '
建議的 shell 腳本/函數
如果您仍然需要更改權限,您可以使用以下程式碼作為 shell 腳本或函數的基礎(稱為類似wget-exe
):
#!/bin/sh
downloads=$(cygpath -u "C:\Users\Brenton\Downloads")
wget -P "$downloads" "$@"
dir="$PWD"
cd "$downloads"
chmod 755 *.exe *.msi
cd "$dir"
# Alternative version using find to change permissions of all .msi and .exe files
# downloaded in the last day.
# find "$downloads" -mtime -1 \( -name '*.exe' -o -name '*.msi' \) -print0 | xargs -0 chmod +w