123

How do I gunzip to a destination directory other than the current one?

This did not work:

gunzip *.gz /putthemhere/
Oliver Salzburg
  • 86,445
  • 63
  • 260
  • 306
Scott Szretter
  • 1,863
  • 5
  • 21
  • 24

3 Answers3

148

Ask gunzip to output to standard output and redirect to a file in that directory:

gunzip -c file.gz > /THERE/file

zcat is a shortcut for gunzip -c.

If you want to gunzip multiple files iterate over all files:

for f in *.gz; do
  STEM=$(basename "${f}" .gz)
  gunzip -c "${f}" > /THERE/"${STEM}"
done

(here basename is used to get the part of the filename without the extension)

Benjamin Bannier
  • 16,044
  • 3
  • 43
  • 41
4

If you need to extract a single file and write into a root-owned directory, then use sudo tee:

zcat filename.conf.gz | sudo tee /etc/filename.conf >/dev/null

If the file is coming from a remote source (i.e., ssh, curl https, etc), you can do it like this:

ssh remoteserver cat filename.conf.gz | zcat | sudo tee /etc/filename.conf >/dev/null

(Note that these examples only work for a single file, unlike the example *.gz, which is all gzipped files in the directory.)

Paul
  • 766
  • 1
  • 6
  • 22
fatal_error
  • 890
  • 5
  • 6
  • For writing with root privileges, `sudo tee $filename >/dev/null` is a little more idiomatic than using `dd`. – dcoles Nov 17 '18 at 21:17
  • 1
    @Toto @AulisRonkainen You should've approved [this suggested edit](https://superuser.com/review/suggested-edits/1127854). The answerer, in their 2018-11-21 edit, meant to edit their answer to say `sudo tee` instead of `sudo dd`. The answerer replaced two instances, but it seems they just forgot to edit that part in the aforementioned suggested edit. – galacticninja Jun 26 '22 at 04:28
1

You can try with > to redirect the result to the place you want.

jangelfdez
  • 202
  • 1
  • 2