15

I have a zip archive. The unzip -l myarchive.zip command gives this listing:

top/subtop/files/1.txt
top/subtop/files2/2.txt
etc

The root folders are top/subtop for all files. How to extract those files without the two top/subtop folders?

E.g. when I am in /home/myuser/public_html directory, files/1.txt and files2/2.txt shoud be extracted directly to that directory.

I tried unzip myarchive.zip top/subtop/* but it created top/subtop directories anyway.

0

5 Answers 5

12

Unfortunately, you can't. Your only real option is to just move them after they are extracted.

2
  • 1
    Hmm, good to know. I asked this because a few days ago, when creating an archive, it was adding some paths from above, unintentionally. So there was a problem unzipping them because of the additional top paths. However, I can't repeat this today - today it's working ok, i.e. when in top/subtop directory and doing zip -r files.zip * it does not add the top/subtop path as prefix to files path. I think I do exactly the same command, but strangely, results are different, so it is not necessary to strip top directories when unzipping.
    – camcam
    Jul 5, 2012 at 6:12
  • Note that it is possible to ignore all directories (simply placing all the files next to each other) with unzip -j. May 11, 2019 at 1:32
6

You might want to try the tar command, which has a --strip-components feature and can operate on zip files.

3
  • 2
    Does not work with tar (GNU tar) 1.15.1: tar: This does not look like a tar archive tar: Error exit delayed from previous errors Jan 6, 2014 at 22:05
  • 2
    FreeBSD's tar can handle ZIP-archives. Other tar-implementations aren't as full-featured, unfortunately.
    – Mikhail T.
    Apr 25, 2014 at 20:30
  • 2
    For debian users, FreeBSD's tar is available as bsdtar (apt-get install bsdtar) if you want to use tar to extract zip files.
    – Niklas B
    May 9, 2017 at 19:55
1

Using JMeter as an example:

# It's a good idea to set JMETER_HOME.
export JMETER_HOME=/usr/local/jmeter
unzip -q /tmp/apache-jmeter-5.4.1.zip -d $JMETER_HOME
for a in `ls -d -1 $JMETER_HOME/*`; do mv $a/* $JMETER_HOME; rmdir $a; done

Simple and portable.

-1
$ unzip myarchive.zip
$ mv top/subtop/* .
1
  • It's too simple. You didn't extract the files with unzip
    – smac89
    Jun 4, 2020 at 4:59
-3

I used this command to copy all files to my root file directory after Extracting All zipped files, it worked great. Huge time saver:

for /r %f in (00P*) do @copy "%f" 

(http://mlichtenberg.wordpress.com/2011/01/25/command-line-fun-how-to-flatten-a-folder-hierarchy/)

1
  • 8
    You do realize this is a DOS command, and has nothing to do with a Linux command line, right?
    – MestreLion
    Aug 31, 2015 at 11:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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