Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I need to pull a single file from a ZIP file which I know the path to. Is there a command like the following:

unzip -d . myarchive.zip path/to/zipped/file.txt

Unfortunately, the above command extracts and recreates the entire path to the file at ./path/to/zipped/file.txt. Is there a way for me to simply pull the file out into a specified directory?

share|improve this question
up vote 50 down vote accepted

You can extract just the text to standard output with the -p option:

unzip -p myarchive.zip path/to/zipped/file.txt >file.txt

This won't extract the metadata (date, permissions, …), only the file contents. That's the price to pay for the convenience of not having to move the file afterwards.

Alternatively, mount the archive as a directory and just copy the file. With AVFS:

cp -p ~/.avfs"$PWD/myarchive.zip#"/path/to/zipped/file.txt .

Or with fuse-zip:

mkdir myarchive.d
fuse-zip myarchive.zip myarchive.d
cp -p myarchive.d/path/to/zipped/file.txt .
fusermount -u myarchive.d; rmdir myarchive.d
share|improve this answer
Will it work for binary files, say a jar file? – Naftuli Tzvi Kay Jun 1 '11 at 1:01
@TK Kocheran: Why don't you just test it? I tested first command, and it worked. – user unknown Jun 1 '11 at 3:09
@TKKocheran: Jar files are zips, so the unzip and fuse-zip methods will obviously work. The AVFS method also works, because AVFS guesses the format based on file names and knows about .jar; if your file is named differently you might need to tell AVFS to use its zip handler, e.g. ~/.avfs$PWD/foo.apk#uzip/META-INF. – Gilles Jun 1 '11 at 7:19
@TKKocheran: There's no problem, -p extracts the file as-is (-c does text conversion). – Gilles Jun 1 '11 at 20:50
I think the answer of @Myles is more elegant, because it doesn't require output redirection and it preserves file attributes. – gertvdijk Dec 4 '12 at 15:42
unzip -j "myarchive.zip" "in/archive/file.txt" -d "/path/to/unzip/to"

Enter full path for zipped file, not just the filename. Be sure to keep the structure as seen from within the zip file.

This will extract the single file file.txt in myarchive.zip to /path/to/unzip/to/file.txt.

share|improve this answer
This is the better answer. – redburn Feb 24 '14 at 14:33
It doesn't handle the case where you want the generated filename to be different. – Oleg Vaskevich Oct 27 '14 at 21:21
the "-j" paramter: junk paths. The archive's directory structure is not recreated; all files are deposited in the extraction directory (by default, the current one). the "-d" parameter: extract files into exdir – e1i45 Jan 29 '15 at 16:14
@OlegVaskevich, the question doesn't request target filename to be different – Tapemaster May 11 '15 at 10:49
I know, thanks guys :P – Myles Oct 10 '15 at 7:48

Simpler version:


This will recreate PATH_OF_FILE_INSIDE_ARCHIVE in current directory but only extracts specified file.

To list all files in a Zip archive:

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.