Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a dedicated folder for every zip files in a directory and extract zip files

If I choose a zip file and right click "extract here" a folder with the zip filename is created and the entire content of the zip file is extracted into it.

However, I would like to convert several zip files via shell. But when I do

unzip filename.zip 

the folder "filename" is not created but all the files are extracted into the current directory.

I have looked at the parameters but there is no such parameter. I also tried

for zipfile in \*.zip; do mkdir $zipfile; unzip $zipfile -d $zipfile/; done 

but the .zip extension of the 2. $zipfile and 4. $zipfile have to be removed with sed. If I do

for zipfile in \*.zip; do mkdir sed 's/\.zip//i' $zipfile; unzip $zipfile -d sed 's/\.zip//i' $zipfile/; done  

it is not working.

How do I replace the .zip extension of $zipfile properly?

Is there an easier way than a shell script?

like image 888
creativeDev Avatar asked Nov 12 '11 22:11

creativeDev


People also ask

How do I make a group of zip files?

Right-click on the file or folder. Select “Compressed (zipped) folder”. To place multiple files into a zip folder, select all of the files while hitting the Ctrl button. Then, right-click on one of the files, move your cursor over the “Send to” option and select “Compressed (zipped) folder”.

How do I create a zip folder?

In your computer's files, choose the folder you'd like to zip/compress. Right-click the folder, choose Send to, and then click Compressed (zipped) folder. A new zipped folder will appear in the same location as your original folder. This Zip File can now be used for your HTML drop.


1 Answers

unzip file.zip -d xxx will extract files to directory xxx, and xxx will be created if it is not there. You can check the man page for details.

The awk line below should do the job:

ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}'|sh 

See the test below,

note that I removed |sh at the end, since my zips are fake archives; I just want to show the generated command line here.

kent$  ls -l total 0 -rw-r--r-- 1 kent kent 0 Nov 12 23:10 001.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 002.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 003.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 004.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 005.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 006.zip -rw-r--r-- 1 kent kent 0 Nov 12 23:10 007.zip  kent$  ls *.zip|awk -F'.zip' '{print "unzip "$0" -d "$1}' unzip 001.zip -d 001 unzip 002.zip -d 002 unzip 003.zip -d 003 unzip 004.zip -d 004 unzip 005.zip -d 005 unzip 006.zip -d 006 unzip 007.zip -d 007 
like image 147
Kent Avatar answered Oct 05 '22 10:10

Kent