如何在 Windows 上将 man 和 zip 添加到“git bash”安装中

Posted

技术标签:

【中文标题】如何在 Windows 上将 man 和 zip 添加到“git bash”安装中【英文标题】:How to add man and zip to "git bash" installation on Windows 【发布时间】:2016-12-11 11:55:41 【问题描述】:

我在 Windows 上使用 git bash - 即通过集成的 bash 用于 Windows 的 git。显然它使用了MINGW/MSYS 基础。 (@VonC 更新:现在是 uses msys2,自 2015 年第四季度以来 msysgit is obsolete。

所以已经安装了很多 MSYS 工具 - 从 awkzcat。但是我想念man 命令和zip 将多个文件压缩成一个zip 文件(unzip 存在!)。

我可以从哪里安装它们?我不想安装另一个MINGW 系统!有什么方法可以在git bash 安装中添加一些预编译工具?

【问题讨论】:

【参考方案1】:

2016:可以从GoW (Gnu On Windows) 安装zip 命令。未提供man(太大)。

需要注意的是,如果您想从 GoW 添加zip 命令,仍然需要下载并安装整个 GoW 系统。然后您可以从bin 目录中删除其他命令,但请确保将所需的dll 保留在该目录中。

2021 年更新:tar/zip 默认安装在 Windows 10 上。 下面提供了基于 7-zip 的解决方案。

【讨论】:

感谢您对msys2的澄清。 不确定是否要安装 GoW - 这会复制大多数已经存在的命令。所以也许最好从 msys2 本身重新开始,然后添加gitzipman 到它... 你可以只提取你需要的zip.exe。 我有一台受控的笔记本电脑,无法将内容安装到典型目录中。我可以将“zip”放在我的路径中,但是 DLL 呢? @AsGoodAsItGets 我同意。我已经编辑了这个(旧的)答案来表达这么多。【参考方案2】:

7-zip可以添加到gitbash,如下:

    在 Windows 上安装 7-zip。 将 7-zip 文件夹 (C:\Program Files\7-Zip) 添加到 PATHgitbash exp:export PATH=$PATH:"C:\Program Files\7-Zip"临时) 在 Windows 上,添加 PATH 如下图所示(永久

    7z.exe 的副本复制为zip.exe 再次重新打开gitbash。完成!

这样,它可以在我的笔记本电脑上运行。

如果您跳过第 3 步。您仍然可以将 zip 命令调用为 7z 而不是 zip

结论:Gitbash 是基于 windows Path 运行的,我认为你可以运行你添加到 windows PATH 的任何命令。

【讨论】:

这对我有用,但没有发现第 3 步的需要,我改用 7z 命令。示例:7z a -r zipped_filename.zip * @linuxeasy 我记得以前从未这样做过。 谢谢@nokieng。第 3 步是我在寻找在 Windows 上安装 Sdkman 的特定需求。 太棒了.. 这是一个简单、简单且有效的技巧,不仅效果很好,而且节省了很多时间:) 谢谢。我也遇到了同样的情况,现在可以安装 sdkman 了。 这对我有用,让我不必在 gitbash 上安装 zip,由于某些莫名其妙的原因没有包管理器【参考方案3】:

这是另一组稍有不同的说明,用于在 Windows 上为 git bash 安装 zip

    Navigate to this sourceforge page 下载zip-3.0-bin.zip 在压缩文件中,在bin 文件夹中,找到文件zip.exe。 将文件 zip.exe 解压到您的 mingw64 bin 文件夹中(对我来说:C:\Program Files\Git\mingw64\bin) Navigate to to this sourceforge page 下载bzip2-1.0.5-bin.zip 在压缩文件的bin文件夹中,找到文件bzip2.dllbzip2.dll 提取到您的mingw64\bin 文件夹(与上述相同的文件夹:C:\Program Files\Git\mingw64\bin

【讨论】:

这就像魔术一样 - 让我无法理解为什么它需要 bzip2.dll 文件。 这成功了!一定要复制bzip2.dll 而不是bzip2.zip,就像我尝试过的那样,它不起作用。 感谢您的快速提示。我最近填满了系统盘,试图安装大包,系统管理员寄给我。我需要一个小后门方法来完成今天的工作,而这只是门票。【参考方案4】:

git-archive,无需任何安装准备,可以创建zip-archive。

mkdir workrepo
cd workrepo
git init
cp -r [target_file_or_dir] .
git add .
git commit -m commit
git archive -o ../myarchive.zip @
cd ..
rm -rf workrepo

以下脚本可能可用: zip.sh foo.zip target_file_or_dir

#!/usr/bin/bash

set -eu

unset workdir
onexit() 
  if [ -n $workdir- ]; then
    rm -rf "$workdir"
  fi

trap onexit EXIT

workdir=$(mktemp --tmpdir -d gitzip.XXXXXX)


cp -r "$2" "$workdir"

pushd "$workdir"
git init
git config --local user.email "zip@example.com"
git config --local user.name "zip"
git add .
git commit -m "commit for zip"
popd

git archive --format=zip -o "$1" --remote="$workdir" HEAD

【讨论】:

对于cp 命令:更喜欢使用-a 选项而不是-r 选项。 “所有人”使用 -r 选项,而“所有人”想要 -a 行为...【参考方案5】:

我很高兴分享我在这个问题上的经验,自从我第一次使用 Groovy 以来,我已经两年不知道了。我的方法需要在 Windows 操作系统中安装 git for Windows。

这些步骤用于安装7z 命令行实用程序,其行为与zip 略有不同:

从its official website 下载并安装 7-Zip。以我为例,默认安装在Windows 10的/c/Program Files/7-Zip目录下。 以管理员权限运行git Bash并导航到目录/c/Program Files/Git/mingw64/bin,可以运行命令ln -s "/c/Program Files/7-Zip/7z.exe" 7z.exe

我很确定它会对您有很大帮助。相信我!

【讨论】:

不好的是7zip不支持像-j这样的所有cmd开关【参考方案6】:

我使用choco 作为我的 Windows 包管理器。

我使用PowerShell 安装了带有choco 的7zip(您必须是管理员才能使用Choco)

PS > choco install 7zip.install

打开另一个gitbash 终端并找到7z.exe 可执行文件

$ which 7z
/c/ProgramData/chocolatey/bin/7z

7z.exe 直接复制到zip.exevoila

$ cp /c/ProgramData/chocolatey/bin/7z.exe /c/ProgramData/chocolatey/bin/zip.exe

【讨论】:

【参考方案7】:

您可以通过将man <command> 映射到<command> --help | less 来模仿shell 中的一小部分人行为

不幸的是,在我的机器上,bash 别名不会将标志添加到位置参数,它会尝试将标志作为命令运行并失败(alias man="$1 --help" 不起作用)。

并且不允许使用名为man() 的函数!

幸运的是,bash 函数和别名的组合可以实现这种映射。将下面的代码放在您的 ~/.bashrc 中(如果不存在则创建一个)。别忘了source ~/.bashrc

# man command workaround: alias can't pass flags, but can't name function man
m() 
    "$1" --help | less

alias man="m"

它不会为您提供完整的手册页,但如果您要查找的只是命令及其标志的基本信息,那么这可能就是您所需要的。

【讨论】:

有趣的选择。 +1。尽管<command> --help 通常是实际man <command> 内容的一小部分 创意思维! :-) 我的问题不只是关于man 工具。而且我猜想zip 功能更难用 bash 函数和别名来模拟。 ;-)【参考方案8】:

您可以从http://gnuwin32.sourceforge.net/packages.html 安装单独的 GNU 工具,例如 zip

然后在您的启动脚本中添加"/c/Program Files (x86)/GnuWin32/bin"PATH,如.profile.bash_profile.bashrc 等。

【讨论】:

【参考方案9】:

您可以按照以下步骤操作。

    转到以下链接 https://sourceforge.net/projects/gnuwin32/files/

    找出您缺少的任何命令 在这里,我需要 zip 和 bzip2 来执行 zip 命令。因为 zip 命令依赖 bzip2.dll 运行。否则你会得到错误“加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录”。

    解压下载的文件 在这里,我在 bin 文件夹中下载“zip.exe”的“zip-3.0-bin.zip”和“bzip2.dll”的“bzip2-1.0.5-bin.zip”。 /bin/.exe

    将命令exe文件复制到git-bash文件夹中 这里我将“zip.exe”和“bzip2.dll”复制到\Git\usr\bin。

参考链接 https://ranxing.wordpress.com/2016/12/13/add-zip-into-git-bash-on-windows/

【讨论】:

【参考方案10】:

ln -s /mingw64/bin/ziptool.exe /usr/bin/zip

【讨论】:

【参考方案11】:

在msys2中,我通过安装man-db恢复了git help <command>的功能:

|prompt> pacman -Syu man-db
|prompt> git help archive

对于 zip 功能,我也使用 git archive(类似于 yukihane 的回答)。

【讨论】:

【参考方案12】:

这是另一个我没有注意到的 7-Zip 选项:

创建一个名为zip的脚本:

$ vi ~/bin/zip

参考 7z 指定 add 命令后跟 args:

#!/bin/bash
/c/Progra~1/7-Zip/7z.exe a "$@"

最后让它可执行

$ chmod ugo+x ~/bin/zip

这有助于使 ytt 构建脚本变得愉快。

+ zip ytt-lambda-website.zip main ytt

7-Zip 18.01 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-01-28

Scanning the drive:
2 files, 29035805 bytes (28 MiB)

Creating archive: ytt-lambda-website.zip

Add new data to archive: 2 files, 29035805 bytes (28 MiB)

【讨论】:

【参考方案13】:

尽管关于man 这个问题已经得到了相当彻底的回答,但这里还没有突出显示另一种压缩方法。 @Zartc 让我注意到 内置了一个 zip 压缩实用程序:ziptool。然而,在尝试使用它时,我发现它远非直接替换,您需要指定每个单独的文件和文件夹。所以我深入研究文档并进行试验,直到我有一个 bash 函数,它可以完成所有繁重的工作,并且可以非常类似于基本的 zip -qrf name * 压缩调用:

zipWithZiptool() 
  # Docs: https://libzip.org/documentation/ziptool.html
  targetFilePath="$1"
  shift
  args=() # collect all args in an array so spaces are handled correctly
  while IFS=$'\n\r' read -r line; do
    if [[ -d "$line" ]]; then
      args+=("add_dir" "$line") # Add a single directory by name
    else
      # add_file <pathInZip> <pathToFile> <startIndex> <length>
      args+=("add_file" "$line" "$line" 0 -1)
    fi
  done <<< "$(find "$@")" # call find with every arg to return a recursive list of files and dirs
  ziptool $targetFilePath "$args[@]" # quotation is important for handling file names with spaces

然后,您可以像这样调用当前目录的内容来压缩当前目录的内容:

zipWithZiptool "my.zip" *

【讨论】:

这是个好主意。但是,我在我的机器上收到“Git/mingw64/bin/ziptool.exe:加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录” @MikaëlMayer 这似乎在这里的几个系统上运行没有问题,所以它可能是一个本地问题。也许这有帮助? github.com/msys2/MINGW-packages/issues/4588【参考方案14】:

Windows 上,您可以使用 tar 代替 zip

tar -a -c -f output.zip myfile.txt

与,

zip output.zip myfile.txt

无需安装任何外部压缩工具。

【讨论】:

超级创意,非常聪明。这行得通。【参考方案15】:

在 Windows 上安装 SDKMAN 的步骤

以管理员权限运行 Windows 终端。在里面打开 git bash。 (Ctrl + Shift + 4)

winget install -e --id GnuWin32.Zip
mkdir ~/bin
cp /usr/bin/unzip ~/bin/zip
curl -s "https://beta.sdkman.io" | bash
source "/c/Users/ajink/.sdkman/bin/sdkman-init.sh"
sdk selfupdate force

完成! :)

【讨论】:

【参考方案16】:

关于zip,可以使用下面的perl脚本打包文件:

#!/usr/bin/perl
use IO::Compress::Zip qw(:all);
$z = shift;
zip [ @ARGV ] => $z or die "Cannot create zip file: $ZipError\n";

如果你让它可执行,将它命名为zip,并把它放在你的$PATH中,你可以这样运行它:

zip <em>archive.zip</em> <em>files...</em>

但是它不适用于目录。无需安装任何东西,因为perl 和所有必需的模块都已经存在于 Git for Windows 安装中。

关于man,至少对于git,有一个像这样调用的文档:

git <em>option</em> --help

它将在您的默认浏览器中打开。

【讨论】:

【参考方案17】:

如果你也愿意安装 CygWin,你可以将 CygWin 路径添加到你的 GitBash 路径中,如果 zip 在那里,它就可以工作。例如添加

PATH=$PATH:/c/cygwin/bin
export PATH

到您的.bashrc;注意:我会把它放在路径的结束,而不是开始。

由于 CygWin 具有基于 UI 的安装程序,因此可以轻松添加或删除 zip 或 man 等应用程序。

你可以通过说来找出每个窗口的路径

`cygpath -w /bin`

在每个相应的外壳中。

【讨论】:

嗯,我选择 GitBash/MSYS 路径的全部原因是为了避免 Cygwin 的安装程序驱动方法。 - 如果我可以通过 zip 文件或类似文件安装 Cygwin(远离安装程序内下载),这是我的第一选择! 让我猜猜...使用 Linux,您可以运行 Slackware :^)【参考方案18】:

这是我的经验,我无法在笔记本电脑中运行和 exe 或 .msi 文件。所以从https://github.com/bmatzelle/gow/wiki 下载文件> 立即下载并下载源代码(Zip)并将此文件解压缩到文件夹中并使用文件夹名称更新路径变量。 这对我有用。

【讨论】:

以上是关于如何在 Windows 上将 man 和 zip 添加到“git bash”安装中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 上将现有密钥添加到 openssh?

如何在 Windows 上将 NPM 升级到特定版本 6.4.1?

如何在 Windows 上将 docker nginx 与 express 和 react 应用程序连接起来

如何在 Windows 上将 std::filesystem 与 mingw32-make 和 msys2 一起使用

如何在 Windows 上将点与无文件扩展名结合使用? [复制]

linux下如何用unzip解压目录内所有zip文件?