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
7

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.

0
$ 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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .