Reputation: 10384
I am using git bash
on Windows - that is git
for Windows via the integrated bash
. Apparently it uses the MINGW
/MSYS
underpinning. (Update from @VonC: It now uses msys2 since msysgit is obsolete since Q4 2015.)
So there are already a lot of MSYS
tools installed - from awk
to zcat
. However I miss the man
command and zip
to compress multiple files into a zip file (unzip
exists!).
Where from can I install them? I do not want to install another copy of the MINGW
system! Any way just to add some pre-compiled tools to the git bash
installation?
Upvotes: 154
Views: 189406
Reputation: 2080
After a bit of an Epiphany, it turns out that the Windows binary zipped package (Windows can unzip it, don't worry...) found here: https://gnuwin32.sourceforge.net/packages/zip.htm was incomplete...
It lacks gzip2.dll (it's mentioned in small font at the bottom, in Requirements...)
The way to go for me was to download the complete installer, then to add the dir path in my Windows Path folder. Also, if you use VS Code, you'll have to restart VS Code to load the latest Path...
Unit test: zip --version
Pheew.
Upvotes: 0
Reputation: 7955
If you use Scoop as your Windows package manager, you can do:
scoop install zip
This will install zip
. I didn't see any packages for installing man
using Scoop.
Upvotes: 2
Reputation: 10047
steps to install SDKMAN on windows
Run Windows Terminal in Admin rights. open git bash inside. (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 "${HOME}/.sdkman/bin/sdkman-init.sh"
sdk selfupdate force
After you can install Java like this.
sdk install java 17.0.2-open
Done ! :)
Upvotes: 14
Reputation: 31
install zip https://gnuwin32.sourceforge.net/packages/zip.htm
copy zip.exe and bzip2.dll from C:\Program Files (x86)\GnuWin32\bin to C:\Program Files\Git\mingw64\bin
reopen git-bash
Upvotes: 3
Reputation: 1803
If you want to zip files without needing to install any additional tools on Windows, in a way that works both on git bash
and on other *nix systems, you might be able to use perl.
Per Josip Medved's blog, the following script creates an .epub (which is a zip file), and includes a filter for stripping src/
from the files added to the zip:
perl -e '
use strict;
use warnings;
use autodie;
use IO::Compress::Zip qw(:all);
zip [
"src/mimetype",
<"src/META-INF/*.*">,
<"src/OEBPS/*.*">,
<"src/OEBPS/chapters/*.*">
] => "bin/book.epub",
FilterName => sub { s[^src/][] },
Zip64 => 0,
or die "Zip failed: $ZipError\n";
'
Upvotes: 0
Reputation: 1297
On Windows, you can use tar instead of zip.
tar -a -c -f output.zip myfile.txt
which is same as,
zip output.zip myfile.txt
no need to install any external zip tool.
Upvotes: 15
Reputation: 12032
Here's another, slightly different, set of instructions to install zip
for git bash
on windows:
zip-3.0-bin.zip
bin
folder, find the file zip.exe
.zip.exe
to your mingw64
bin folder (for me: C:\Program Files\Git\mingw64\bin
)bzip2-1.0.5-bin.zip
bin
folder, find the file bzip2.dll
bzip2.dll
to your mingw64\bin
folder (same folder as above: C:\Program Files\Git\mingw64\bin
)Upvotes: 129
Reputation: 2126
7-zip can be added to gitbash
as follows:
C:\Program Files\7-Zip
) to PATH
gitbash
exp: export PATH=$PATH:"C:\Program Files\7-Zip"
(temporary)PATH
like image below (permanent)7z.exe
to be zip.exe
gitbash
again. done!This way, it works on my laptop.
If you skip step 3. you still can call zip command as 7z
instead of zip
Conclusion: Gitbash
is running base on windows Path
, I think you can run any command that you have added to your Windows PATH
.
Upvotes: 78
Reputation: 2643
git-archive
, is prepared without any installation, can create 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
Following script may be usable:
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 "[email protected]"
git config --local user.name "zip"
git add .
git commit -m "commit for zip"
popd
git archive --format=zip -o "$1" --remote="$workdir" HEAD
Upvotes: 21
Reputation: 1324248
2016: The zip
command can be installed from GoW (Gnu On Windows). man
is not provided (too big).
It is to note, however, that if you only want to add the zip
command from GoW, still the whole GoW system has to be downloaded and installed. Then you can delete the other commands from the bin
directory, however make sure to keep the needed dlls in the directory.
Update 2021: tar/zip are by default installed on Windows 10.
7-zip based solutions are available below.
Upvotes: 47
Reputation: 3687
Though this question as been answered quite thoroughly in regards to man
there is one alternative to zipping that has not been highlighted here yet. @Zartc brought to my attention that there is a zip compression utility built-in: ziptool
. In trying to use it however I found out it is no where near a drop-in replacement and you need to specify each individual file and folder. So I dug into the docs and experimented until I had a bash-function that can do all the heavy lifting and can be used very similar to a basic zip -qrf name *
compression call:
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
}
You can then for example zip the contents of the current directory by calling it like this:
zipWithZiptool "my.zip" *
Upvotes: 2
Reputation: 21
Here is my experience, I cant run and exe or .msi files in my laptop. so downloaded filed from https://github.com/bmatzelle/gow/wiki > go to download Now and Downloaded Source Code (Zip) and unzipped this file in a folder and updated path variable with folder name. This worked out for me.
Upvotes: 0
Reputation: 3392
Here's yet another 7-Zip option that I didn't notice:
Create a script named zip:
$ vi ~/bin/zip
Reference 7z specifying the add command followed by the args:
#!/bin/bash
/c/Progra~1/7-Zip/7z.exe a "$@"
Finally make it executable
$ chmod ugo+x ~/bin/zip
This helped to make a ytt build script happy.
+ 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)
Upvotes: 2
Reputation: 123
I use choco
as my Windows Package Manager.
I install 7zip with choco
using PowerShell
(you must be admin to use Choco)
PS > choco install 7zip.install
Open another gitbash
Terminal and locate the 7z.exe
executable
$ which 7z
/c/ProgramData/chocolatey/bin/7z
Do a straight copy of 7z.exe
to zip.exe
and voila
$ cp /c/ProgramData/chocolatey/bin/7z.exe /c/ProgramData/chocolatey/bin/zip.exe
Upvotes: 10
Reputation: 21
In msys2, I restored the functionality of git help <command>
by installing man-db:
|prompt> pacman -Syu man-db
|prompt> git help archive
For zip functionality, I also use git archive
(similar to yukihane's answer).
Upvotes: 2
Reputation: 1671
I am so glad to share my experience on this issue that I haven't known for two years since the first day I played with Groovy. My method needs to have git
for Windows installed in Windows OS.
These steps are for installing 7z
command-line utility, which behaves a bit differently from zip
:
/c/Program Files/7-Zip
in Windows 10 as my case./c/Program Files/Git/mingw64/bin
, you can run the command ln -s "/c/Program Files/7-Zip/7z.exe" 7z.exe
I am pretty sure it could help you a lot. Trust me!
Upvotes: 15
Reputation: 191
If you are willing to install CygWin also, you can add the CygWin path to your GitBash path, and if zip is there, it will work. e.g. add
PATH=$PATH:/c/cygwin/bin
export PATH
to your .bashrc
; NOTE: I would put it at the end of the path as shown, not the beginning.
Since CygWin has a UI-based installer, it's easy to add or remove applications like zip or man.
You can figure out the windows paths of each by saying
`cygpath -w /bin`
in each respective shell.
Upvotes: 1
Reputation: 3895
Regarding zip
, you can use a following perl
script to pack files:
#!/usr/bin/perl
use IO::Compress::Zip qw(:all);
$z = shift;
zip [ @ARGV ] => $z or die "Cannot create zip file: $ZipError\n";
If you make it executable, name it zip
, and put it in your $PATH
, you can run it like this:
zip archive.zip files...
however it will not work for directories. There is no need to install anything, as perl
and all required modules are already there in the Git for Windows installation.
Regarding man
, at least for git
there is a documentation invoked like this:
git option --help
it will open in your default browser.
Upvotes: 0
Reputation: 101
Here are the steps you can follow.
Go to the following link https://sourceforge.net/projects/gnuwin32/files/
Find out whatever command you are missing Here I need zip and bzip2 for zip command. Because zip command relies on bzip2.dll to run. Otherwise you will get error “error while loading shared libraries: ?: cannot open shared object file: No such file or directory”.
Unzip the downloaded files Here I am downloading “zip-3.0-bin.zip” for “zip.exe” and “bzip2-1.0.5-bin.zip” for “bzip2.dll” in the bin folder. /bin/.exe
Copy the command exe file into git-bash folder Here I am copying “zip.exe” and “bzip2.dll” to \Git\usr\bin.
Reference Link https://ranxing.wordpress.com/2016/12/13/add-zip-into-git-bash-on-windows/
Upvotes: 4
Reputation: 37827
You can install individual GNU tools from http://gnuwin32.sourceforge.net/packages.html such as zip
.
Then add "/c/Program Files (x86)/GnuWin32/bin"
to PATH
in your startup script like .profile
, .bash_profile
, .bashrc
, etc.
Upvotes: 6
Reputation: 1427
You can mimic a small subset of man behavior in the shell by mapping man <command>
to <command> --help | less
Unfortunately, on my machine bash aliases won't add flags to positional arguments, it will try to run the flag as a command and fail (alias man="$1 --help"
doesn't work).
And a function called man()
is not allowed!
Luckily a combination of bash functions and aliases can achieve this mapping. Put the code below in your ~/.bashrc (create one if it is not there). Don't forget to source ~/.bashrc
.
# man command workaround: alias can't pass flags, but can't name function man
m() {
"$1" --help | less
}
alias man="m"
It doesn't get you the full man page, but if all you're looking for is basic info on a command and its flags, this might be all you need.
Upvotes: 6