Command to 'gzip' a folder?

67

27

I am new to Mac command prompt stuff. How do you create a gzip of a folder in Mac OS X? I was told by a few folks that if you want to create a gzip of a folder you should 'tar' it first and then 'gzip' it. Is this correct?

thndrkiss

Posted 2010-07-09T11:58:42.883

Reputation: 803

1This isn't a programming question? Your post is tagged with objective-c but you're asking about the command-line. – rakuo15 – 2010-07-09T12:04:22.697

Answers

132

Tar is the archive tool and gzip is the compression tool. In order to compress a full directory, first you need to archive it to a single file. That's what the job is tar. and then you compress the archived file. You can do both task in a single tar command with proper option.

tar -czf folder_name.tar.gz folder_name/

If you don't want to make a tar archive (may be you want to compress just a single file), then you can use gzip command directly.

gzip file.txt

It will create a compressed file named file.txt.gz

taskinoor

Posted 2010-07-09T11:58:42.883

Reputation: 1 436

15Warning: gzip file.txt replaces the original file. – Zoltán – 2015-04-22T17:20:20.113

7@Zoltán Use gzip -k file.txt to "keep" (don't delete) the input file. – thohl – 2016-08-11T16:11:59.107

32It's worth mentioning what the options -czf after tar are for: c indicates that you want to create a tar archive, z applies gzip on the intermediate tar archive, and f is for the subsequent final file name folder_name.tar.gz. – fideli – 2010-07-09T19:11:39.687

14

If somebody is still finding this question when searching "gzip in Mac", I wrote a guide that it may be useful to somebody else. Here it goes:

Compressing

The most basic command will compress the file filename.ext and then replace it with filename.ext.gz in the same directory.

gzip filename.ext

If you don't want to lose your original file, then you need to pipe the output of gzip -c to a file.

gzip -c filename.ext > anotherfile.gz

We can also compress from standard input, so we can compress the output of other commands.

cat filename.ext | gzip > anotherfile.gz

OS X also comes with the compress and uncompress commands. They make for a "smarter" gzip, as it doesn't compress the file if it would grow after the compression process. The following command replaces filename.ext with filename.ext.Z in the same directory.

compress filename.ext

Decompressing

To restore a file to it's uncompressed natural state you can use gzip or other of the wrappers. The decompression mode of gzip is called with the -d flag. This mode will replace the file filename.ext.gz with filename.ext in the same directory. There's also a shortcut called gunzip that will do the same.

gzip -d filename.ext.gz
gunzip filename.ext.gz

We can also pipe the decompressed file to the standard output to save it to another file.

gzip -cd filename.ext.gz > anotherfile
gunzip -c filename.ext.gz > anotherfile

Another quick way of reading the content of a gzip to standard output is zcat, it's basically the same as calling gzip -cd but you can call multiple files and have them concatenated the same way as the cat command concats text files. The only drawback is that your files need to be suffixed with the .Z suffix for it to work...

zcat filename.ext.Z
zcat file_a.Z file_b.Z file_c.Z

But fear not! zcat it's still useful, because it can decompress from standard output. So you can basically pipe your files to zcat to have them decompressed on the terminal window.

cat filename.ext.gz | zcat

This is very useful if you need to check the content of a file really quick, and you can even save the output of zcat to a file, just as easy.

cat filename.ext.gz | zcat > anotherfile

The uncompress wrapper works like gzip -cd but it looks for files with the .Z extension to replace them in the current directory, so you only need to specify the file name you want to restore, but it's alright if you call it with the .Z extension, as the program will ignore it.

compress filename.ext
uncompress filename.ext

I hope you find my guide useful :)

Pablo Albornoz

Posted 2010-07-09T11:58:42.883

Reputation: 241

4

MacOS X is Unix so this should work (this work on GNU/Linux)

tar czvf compressed.tar.gz folder

jcubic

Posted 2010-07-09T11:58:42.883

Reputation: 1 533

3

Yes, you have do tar the directory first. The tar-command can do both:

tar -czf archiv.tar.gz mydir/

extract your archiv:

tar -xzf archiv.tar.gz

Till Freier

Posted 2010-07-09T11:58:42.883

Reputation: 131

3

To add to the answer by @taskinoor: if you use single file version, aka

gzip file.txt

be aware that the original file (file.txt) will be removed and you'll have only file.txt.gz

I would put this as comment but dont have enough karma to do that :=)

Miro A.

Posted 2010-07-09T11:58:42.883

Reputation: 273

1gzip --keep file.txt will keep the original and create file.txt.gz. See gzip --help. – Blaise – 2015-06-18T11:45:19.183

1

Yes, this is correct. gzip can only compress a file. tar encodes the directory contents into a single file, which can be further compressed using gzip, bzip2, lzma or anything else.

Roman Cheplyaka

Posted 2010-07-09T11:58:42.883

Reputation: 351