Pol
Pol

Reputation: 11

bash script to replace the name of a zip file

I am very new in programing scripts-. I have a lot of zip files in a directory. I want to extract them replacing the name of the inside file by the zip file, with the correct extension. Error reporting if there is more than one file, excep if is "remora.txt" inside. The file "remora.txt" was an ini file for the zip, and I wont use it any more, but is in a lot of my zip files.

Example 1. ZIp file: maths.zip,

Inside it has: - "tutorial in maths.doc" - "remora.txt"

Action: So the script should erase or deprease "remora.txt" and extract "tutorial in maths.doc" under the name maths.doc

Example 2. ZIp file: geo.zip,

Inside it has: - "excersices for geometry.doc" - "geometry.doc" - "remora.txt"item

Action: It should out put "I found more than a file in geo.zip"

I am Using linux, ubuntu 12

I have done this script, but is not working.

#!/bin/bash
#
# Linux Shell Scripting Tutorial 1.05r3, Summer-2002
#

for archive in *.zip  # First I read the zip file
  do
    ((i++))
    unzip -Z1 $archive  | while read line;  # I read all the files in the ZIP
    do
          line=( ${line//,/ } )
        inside[$a]=("${line[@]}")  # Here I assigne the name of the file to an array
 ((a++))
   done

  If ( $a > 2) then 
  echo " Too much files in file $archive "
  fi

  If ($a <= 2)
  then 
      if (inside[0]!= "remora.txt")
      then unzip -p $archive > $(printf "%s" $archive).doc
      fi
      if (inside[1]!= "remora.txt")
      then unzip -p $archive > $(printf "%s" $archive).doc
      fi

  fi



done

Upvotes: 1

Views: 401

Answers (1)

that other guy
that other guy

Reputation: 123460

Try writing scripts incrementally. Instead of writing 20 statements and then trying to debug them all at once, write one statement at a time and test to make sure it works before writing the next one.

If you run e.g.

If ( $a > 2) then 
echo " Too much files in file $archive "
fi

by itself, you'll see that it doesn't work. You then know more specifically what the problem is, and you can look up something like "bash if variable greater than" on Google or Stackoverflow.

Check out the bash tag wiki for more helpful tips on debugging and asking about code.

Things you'll find includes:

  1. if has to be lower case
  2. You need line feed or semicolon before then
  3. To see if a variable is greater than, use [[ $a -gt 2 ]].
  4. To see if an array element does not equal, use [[ ${inside[0]} != "remora.txt" ]]
  5. Pipelines cause subshells. Use while read ...; do ...; done < <(somecommand) instead.

Upvotes: 1

Related Questions