Recursively unzip files and then delete original file, leaving unzipped files in place from shell Recursively unzip files and then delete original file, leaving unzipped files in place from shell bash bash

Recursively unzip files and then delete original file, leaving unzipped files in place from shell


have you tried:

find . -depth -name '*.zip' -exec /usr/bin/unzip -n {} \; -exec rm {} \;

or

find . -depth -name '*.zip' -exec /usr/bin/unzip -n {} \; -delete

or running a second find after the unzip one

find . -depth -name '*.zip' -exec rm {} \;   


thx for the 2nd command with -delete! helped me a lot..just 2 (maybe helpful) remarks from my side:

-had to use '.zip' instead of `.zip` on my debian system

-use -execdir instead of -exec > this will extract each zip file within its current folder, otherwise you end up with all extracted content in the dir you invoked the find cmd.

find . -depth -name '*.zip' -execdir /usr/bin/unzip -n {} \; -delete

THX & Regards,Nord


As mentioned above, this should work.

find . -depth -name '*.zip' -execdir unzip -n {} \; -delete

However, note two things:

  • The -n option instructs unzip to not overwrite existing files. You may not know if the zip files differ from the similarly named target files. Even so, the -delete will remove the zip file.
  • If unzip can't unzip the file--say because of an error--it might still delete it. The command will certainly remove it if -exec rm {} \; is used in place of -delete.

A safer solution might be to move the files following the unzip to a separate directory that you can trash when you're sure you have extracted all the files successfully.