Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

How can I verify if the zip file is empty or not ? I cannot use if -s in bash as the zip file is not always zero in size. if the zip file has empty directories in it, I want to delete the file else extract the file.

share|improve this question

migrated from stackoverflow.com Jun 19 '12 at 17:05

This question came from our site for professional and enthusiast programmers.

3 Answers 3

up vote 2 down vote accepted

If you have the Info-ZIP tools installed (zip, unzip, zipinfo) you can use zipinfo on the zip file and just send the output to /dev/null. The status will be 0 if the file is not empty.

So:

if zipinfo foo.zip > /dev/null; then
    echo not empty
else
    echo empty
fi
share|improve this answer
    
this was giving me the same return code but I tweaked the above a little bit. add | grep ^- to look for files and then delete the file if $? is 1. Thank you Laurence –  nlrreddy Jun 18 '12 at 23:53
    
+1 I'd never heard of zipinfo before. @nlrreddy If Laurence solved your issue, feel free to accept his answer by clicking the checkmark on the left. –  Tim Pote Jun 19 '12 at 0:57

If you run zipinfo -t foo.zip the exit status (from $?)will give an error if the zip file has nothing in it. In the version I'm running (3.00) this will be 1 but I imagine that's just a general error code, so the ambiguity might cause you other problems.

You'll also have to deal with the text output of the command which is a string with basic info about the file. I believe this answer is similar to one of those above.

Edit: If you want to avoid the ambiguous return value (and you're in the mood for grep) you could grep the output of the above command for "Empty zipfile".

share|improve this answer

If you have jar installed you can use the -t option:

jar -tvf file.zip

Directores will all have trailing slashes so you can pipe it to grep:

if jar -tvf file.zip | egrep -v '/$' > /dev/null; then # we have some files!
  unzip file.zip
else
  rm -f file.zip
fi
share|improve this answer
    
is it possible with pure bash scripting without even using java jar ? –  nlrreddy Jun 18 '12 at 23:10
    
@nlrreddy See my edits. –  Tim Pote Jun 18 '12 at 23:18

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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