Linux unzip without unzip

Unzip file contents, but without creating archive folder

I have a file myarchive.zip that contains many directories, files, etc. Let’s say this myarchive.zip file lives in a directory called «b». Well, when I use the «unzip myarchive.zip» command, the system creates a directory by default called «myarchive» with the contents of the zip file. I do not want the system to create this «myarchive» directory — I just want the contents to be extracted to directory «b». Is this possible? What I’ve been doing now is simply issuing a «cp» command to copy the files from the newly created directory (in this case «myarchive» to «b») to where I want them.

By default, unzip doesn’t create a directory. Your zip file probably has the directory at its top level.

6 Answers 6

My version of unzip has a -j option to not create any directory.

Will extract all the files into the current directory without restoring the directory structure stored in the zip file.

If you want to only remove one level of directories from the archive, (extract myarchive/dir/file as dir/file , not file ), you could use bsdtar (which does supports zip files in addition to tar files) instead and its -s option.

bsdtar -xf /path/to/file.zip -s'|[^/]*/||' 

When using -j the archive directory structure is not recreated and all files are deposited in the extraction folder. This means ALL subfolders are dropped. So if you would have zip/A/f1 , zip/A/B/f2 and zip/A/B/C/f3 you would end up with a single folder with f1, f2, f3. It gets funky if you have files with the same name in different subfolders. Usually you want to just drop the top folder not the entire directory structure.

@CristianVrabie, well that’s exactly what I’m saying in the answer. I’ve added a bsdtar alternative for what you’re asking. See edit.

Looks like this is really simple with bsdtar :

bsdtar —strip-components=1 -xvf file.zip

What the accepted answer doesn’t specify how to do, as you say in the question, if you still want to extract to a specific folder without using the folders paths stored in the zip files, you can use the -j option with -d option in this way:

unzip -j /path/to/file.zip -d other_folder 

You’re right that you can do that; but it won’t create the subdirectories so you still have to incorporate another step; I’m pretty sure the OP wants to rename the root directory of the archive to another name but keep the remaining structure under that directory.

Very useful addition to the answer here though, this is the detail I was just searching for and I’m glad I scrolled down. More upvotes here folks.

Easily to do it with tips create temp folder then move files back to current directory ex:

unzip myfile.zip -d ./tmp mv ./tmp/*/* . 

this is ./tmp not /tmp of system . We create tmp directory inside storaged zip file. so you can see all directories inside

Читайте также:  Linux operatsion tizimi bilan ishlash

The question also applies to ./tmp . If it already exists, any files it contains will be moved along with the archive’s contents. One fix for that is to use mktemp -d .

Assuming you are in the b directory already:

tar zxvf myarchive.zip --strip-components=1 
tar zxvf b/myarchive.zip --strip-components=1 -C b/ 

If performing unzip myarchive.zip produces a directory myarchive with everything in it, then that means the creator of the zip file actually performed zip on that directory.

The only way to create what you want is to just move all the contents outside the directory after you perform unzip :

[user@host]:some/path/b$ unzip myarchive.zip

[user@host]:some/path/b$ ls shows directory myarchive >

[user@host]:some/path/b$ mv myarchive/* .

[user@host]:some/path/b$ rm -R myarchive

[user@host]:some/path/b$ ls shows first level of myarchive (directly in b )>

@KinjalDixit That was my thinking too; Antoine there’s a fatal flaw in your example as Kinjai points out: because you use rm -R and because you’re not using ls -a you’re not showing if there are any dot files; now what happens when you run rm -R and there are dot files? You’ve not copied them so they’re lost. You really should fix that and maybe explain the difference because it’s something that will trip up newbies quite a lot; and consider this: what if it’s not an archive they have? Or what if they add to the command to delete the archive once it’s uncompressed?

Otoh rmdir would make sure it’s empty first. But if the user doesn’t know about dot files it’d confuse them.

Источник

Unzip to a folder with the same name as the file (without the .zip extension)

How to unzip a file (ex: foo.zip ) to a folder with the same name ( foo/ )? Basically, I want to create an alias of unzip that unzips files into a folder with the same name (instead of the current folder). That’s how Mac’s unzip utility works and I want to do the same in CLI.

@Christopher I don’t see how it’s a duplicate. Can you find an answer to my question in that question?

@Fabby, no it doesn’t, I need a dynamic solution that won’t require adding the name of the target folder. I believe the second paragraph makes this very clear.

3 Answers 3

I use unar for this; by default, if an archive contains more than one top-level file or directory, it creates a directory to store the extracted contents, named after the archive in the way you describe:

You can force the creation of a directory in all cases with the -d option:

Alternatively, a function can do this with unzip :

line removes the .zip extension, with no regard for anything else (so foo.zip becomes foo , and ~/foo.zip becomes ~/foo ). The

parameter expansion removes anything up to the last / , so ~/foo becomes foo . This means that the function extracts any .zip file to a directory named after it, in the current directory. Use unzip $1 -d «$» if you want to extract the archive to a directory alongside it instead.

Читайте также:  Linux at command reference

unar is available for macOS (along with its GUI application, The Unarchiver), Windows, and Linux; it is packaged in many distributions, e.g. unar in Debian and derivatives, Fedora and derivatives, community/unarchiver in Arch Linux.

Источник

Are there other options to unzip a file in Ubuntu besides «unzip»? [closed]

Questions must be relevant to professional system administration. Server Fault is a site dedicated to professionals; novice questions are off-topic. Please see the Help Center for more information on topicality. The best advice we can give you is to hire a professional to help you out.

My sysadmin is unreachable right now, and I have a zipped file on the server that I would like to unzip. however, we don’t currently have zip and unzip installed, and I don’t have root access to install them. Am I out of options entirely? Are there other things that can unzip this file?

6 Answers 6

I haven’t tried this, but, there’s a zipfile module in Python’s standard library since version 1.6, and since version 2.6 has had an extractall method

You should be able to do something like:

  1. Create a file with the following contents (editing it to fit your use case).
  2. Save the file as «unzipfile.py»
  3. Run with python unzipfile.py

And it’ll extract test.zip to /home/user/directory .

import zipfile with zipfile.ZipFile('test.zip', "r") as z: z.extractall("/home/user/directory") 

Alternatively, BusyBox contains an unzip «module», and if you could download and run the statically-linked BusyBox, then you could use that to unzip things.

i tried the first part of this and got: The program ‘import’ can be found in the following packages: * imagemagick * graphicsmagick-imagemagick-compat — btw. i didn’t downvote you

You can now just call the module directly from the command line python -m zipfile -e monty.zip target-dir/ (see docs.python.org/2/library/zipfile.html#command-line-interface)

If you have java installed, the jar command can unzip a zipped file:

Update: OpenJDK is downloadable for Linux as a tar.gz archive installable without root access here: http://jdk.java.net/17/

The Windows version is however a zip file so that wouldn’t help on that OS.

The program ‘jar’ can be found in the following packages: * default-jdk * fastjar * gcj-4.6-jdk * openjdk-6-jdk * gcj-4.5-jdk * openjdk-7-jdk Ask your administrator to install one of them 🙁

I am a little scerred to install anything on the server, for fear of the wrath of my sysadmin, but i will definitely try this if need be.

BSD / Mac OSX

The tar utility that ships with Mac and BSD derivatives, support extracting zip archives from the tar command

tar -xvf foo.zip tar --version bsdtar 2.8.3 - libarchive 2.8.3 

Debian / RHEL

The tar archive that ships with Ubuntu and others does not support extracting zip files. The best option will be to scp the file to a machine with zip installed.

tar -xvf foo.zip tar: This does not look like a tar archive tar: Exiting with failure status due to previous errors 
echo "the quick brown fox jumped over the lazy dog" > bar.txt zip -r bar.zip bar.txt rm bar.txt tar -xvf bar.txt cat bar.txt the quick brown fox jumped over the lazy dog 

Rewrote answer to clarify that tar -xvf only works on bsd OS’s. While it is good information, It will not work in this scenario after all.

Читайте также:  Nvme linux низкая скорость

Источник

Read the contents of a zipped file without extraction?

How can I read the contents of a particular file in an archive without extracting the .zip it is contained within? I’m using the Linux command line. An earlier question asks about viewing the directory of the archive. But for me it is not enough to see just a list of the files in the archive, I need to see the contents of a file in the archive.

@fixer1234 (and others): The linked question asks, “How can I view the files in a ZIP archive?” AFAIC, that’s the same question as “How can I see the contents of a file …?” It’s unfortunate that many of the people who answered that question interpreted it as “How can I view the directory of the archive?” However, Gilles’s answer (naturally) and Rajasekhar Tolety’s answer (apparently) to that question provide answers to this question.

@Scott, maybe we should figure out how to merge the two questions so both topics are covered in one, or refocus the other to clearly be about the directory and then move answers between both places to match the questions. Right now, both are a mishmash.

@fixer1234: I agree, up to a point. The moderators are always telling us that duplicates are a good thing, because they provide a greater surface of exposure to the search engines (i.e., more chances that a search will find one of the questions). But there’s the rub: if a user finds one of the questions, and the linkage isn’t obvious (and nobody looks at the lists of “Linked” and “Related” questions — at least not random followers of search results), then the user has found only a fraction of the answers. DavidPostill cast the final vote to reopen this question; maybe you should talk to him.

@Scott — Given that the question asker marked the “How can I view the directory of the archive?” answer as accepted, I have to think that was likely the intent of the question. It is, unfortunately, ambiguously phrased such that it could mean either interpretation.

8 Answers 8

unzip -l archive.zip lists the contents of a ZIP archive to ensure your file is inside.

Use the -p option to write the contents of named files to stdout (screen) without having to uncompress the entire archive.

unzip -p archive.zip file1.txt | less

For this kind of operation I always pipe the output to less , otherwise the whole file goes flying up the screen before you can read it.

BTW zcat is great for viewing the contents of .gz files without having to uncompress them first.

Edit: Changed this answer to use -p instead of -c . -p extracts the file byte-for-byte, while -c prints the filename and may do EOL conversion. Also, unzip -p lets you extract multiple files, but it does not output in the order given like cat does.

Источник

Оцените статью
Adblock
detector