如何在不在本地系统上运行 cygwin 的 setup.exe 的情况下下载单个 cygwin 包(和/或其中的单个文件)?

如何在不在本地系统上运行 cygwin 的 setup.exe 的情况下下载单个 cygwin 包(和/或其中的单个文件)?

我只需要没有 cygwin 环境的特定文件。有没有办法下载某些 unix 工具文件的最新版本,例如 grep.exe 和最新的 cygwin1.exe 文件,就这样。

编辑:我知道可以在这里浏览:http://cygwin.com/packages/,好的,但是这个列表不允许下载。

答案1

我不知道有任何独立程序可以以现成的方式执行此操作,而无需使用 Cygwin 及其更大的块setup.exe(如果您需要的话,请参阅底部的编辑)。我认为所有这些部分都是为了使超小型安装相对容易编写脚本。

这个有两个部分:检索文件和检测版本变化(如果这是您在说“最新”时所寻找的一部分)。

要检索特定文件,您可以检查(或嗅探 Cygwin 安装程序/更新程序发出的请求)setup.exe以确定它从哪里检索单个文件。选择一个镜像,导航到pub/cygwin/release,然后检索文件。例如,以下是我使用的 OSU OSL 镜像的核心 cygwin 包目录的链接

我认为,如果您的单个文件(如grep.exe)包含在特定软件包中,则必须获取整个软件包。一些第三方可能会提供 Cygwin 的解压单个文件,但除了 Cygwin 及其官方镜像之外,我不愿意信任任何人,因此我建议从受信任的来源获取整个软件包,然后提取所需的文件。

确定文件何时更新比较棘手。伪代码如下:

  • 从镜像中获取子目录的当前内容(使用wget或类似)。此语法留下了更易于解析的.listing文件。

    wget --no-remove-listing ftp://cygwin.osuosl.org/pub/cygwin/release/grep/

  • 确定与预期文件名模式匹配的最新文件。 我认为,如果文件命名约定很清晰(Cygwin 通常是这样的),您可以通过将数字部分分解为标记并按数字排序来轻松获取最新版本。您可以快速而粗略地获取匹配的最后一个文件.listing,但这可能会放在grep.2.tgz之后grep.10.tgz,具体取决于所使用的排序方法。

  • 下载并提取/解压/解压缩。 根据您使用的归档器,您可以告诉它仅提取特定文件。

  • 将文件复制到您想要的目的地。

您可以安排脚本每天/每周/随时检查一次。您可能还想获取随附文件md5.sum并比较校验和,具体取决于文件对您的用例的重要性。

说到这个,什么您的用例?您是否只想grep省去其他开销,并保持更新/修补?如果不是,我的答案可能需要相应调整。

编辑:您可能还想查看apt-cyg。我认为它可能实际上需要相当多的核心安装框架,但页面说它只需要 bash、wget、tar、gawk 和 bzip2,所以您可能能够在那里获得依赖项。

我是新手,所以我没有链接,但这个答案有apt-cyg信息,以及如何使用命令行安装setup.exe

通过 Cygwin 命令行升级和安装软件包?

您的问题有点暗示您可能想要比该问题提供的更精简的东西,因此,对于那些正在寻找更简约内容的人,我将保留我的其余答案。

答案2

下载(例如,软件包perl)和/或源的最简单方法是使用以下方法之一:

  1. 使用apt-cyg和:apt-cyg download perl
  2. 使用wget和:
    wget ftp://cygwin.osuosl.org/pub/cygwin/x86_64/release/perl/perl-5.26.3-1-src.tar.xz
  3. 使用浏览器:ftp://cygwin.osuosl.org/pub/cygwin/x86_64/release/perl/

此版本的 apt-cyg 仅需要:wget, ca-certificates, gnupg

相关内容