我在 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