Skip to content

Instantly share code, notes, and snippets.

@erikvip
Last active April 4, 2024 12:26
Show Gist options
  • Save erikvip/63b236078d4ff4163fd3 to your computer and use it in GitHub Desktop.
Save erikvip/63b236078d4ff4163fd3 to your computer and use it in GitHub Desktop.
Import/Export Cygwin List of installed packages

Import & Export Cygwin List of installed Packages

If you want to go from 32 to 64 bit Cygwin but keep all the packages[1], you might find yourself in a spot where you would like to export the list of cygwin packages and also be able to install cygwin with all these packages again. I will tell you how. Open your Cygwin shell and enter

cygcheck -c -d | sed -e "1,2d" -e 's/ .*\$//' > packagelist

This will simply dump a list of installed packages. To install Cygwin 64 with these packages selected, download setup-x86_64[2] and execute it with the command line parameters

./setup-x86_64 -P `awk 'NR==1{printf \$1}{printf ",%s", \$1}' packagelist`
@Grossdm
Copy link

Grossdm commented Feb 28, 2020

perhaps a bit clearer:
cygcheck -c -d | sed "1,2d" | cut -d' ' -f1 > package list

Even sed is unneeded here. Compact and clean:
cygcheck -cd | tail -n+3 | cut -d' ' -f1 > packagelist

@patrikarlos
Copy link

Note, that "-P" expects a comma separated string with packages. If you have a lot of packages, this list can become too large for the terminal. If thats the case, you need to do some heuristic and split the packagelist file into two or more files. Then run the installer on each of these files.

@pedy711
Copy link

pedy711 commented Apr 22, 2021

@patrikarlos's solution worked for me. In my case, the list was too long and I had to split it into multiple files and run the command above one by one.

@aco319sig
Copy link

@RKirchnerNL's explanation worked for me.

@NotNormallyAGitUser
Copy link

NotNormallyAGitUser commented Aug 15, 2023

I am not savvy with awk, so I found tr to work, too. Also, if the package list is short enough, the single comma-separated list of packages can be created on the source computer so destination computer does not need a pre-installed bare-bones Cygwin in order to assemble such a list:

cygcheck -cd | tail -n+3 | cut -d' ' -f1  | tr '\n' ',' | sed -e s=,$== | tee ~/tmp/PackageList.txt
_autorebase,adwaita-icon-theme,adwaita-themes,alternatives,<...snip...>,xwin-xdg-menu,xwinclip,xwininfo,xxd,xz,zip,zlib0,zstd

This needs to be modified into a *.cmd file by prefixing the single-line comma-separated list with .\setup-x86_64.exe -P .

Just be aware that if you copy the file to a *.cmd file before prefixing the line, Windows 10 will "protect" you from running the file (even though you may select Edit from the context menu). You need to open Notepad first, then load the file.

@kasumiru
Copy link

kasumiru commented Nov 17, 2023

cygcheck -c -d | sed -e "1,2d" -e 's/ .*\$//' | awk '{print $1}' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/,/g'  > cygwin_list.txt

and after that on another Windows create bat file with:

setup-x86_64.exe -P _autorebase,adwaita-icon-theme,alternatives,archivemail,... etc full last list. 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment