在 Cygwin 上修改 wget 权限和下载目录

在 Cygwin 上修改 wget 权限和下载目录

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

相关内容