bash脚本替换zip文件的名称

时间:2014-03-15 22:26:21

标签: linux bash unzip

我是编程脚本的新手。 我在目录中有很多zip文件。我想提取它们用zip文件替换内部文件的名称,并使用正确的扩展名。报告是否存在多个文件时出错,例如" remora.txt"内。 文件" remora.txt"是一个压缩文件的ini文件,我不再使用它,但是我的zip文件很多。

示例1。 ZIp文件:maths.zip,

里面有: - " maths.doc教程" - " remora.txt"

操作: 所以脚本应该删除或删除" remora.txt"并在maths.doc中提取"教程"名为maths.doc

示例2。 ZIp文件:geo.zip,

里面有: - " geometry.doc"的例外情况。 - " geometry.doc" - " remora.txt" item

操作: 它应该放在"我在geo.zip"

中找到的不仅仅是一个文件 我是 使用linux,ubuntu 12

我已完成此脚本,但无效。

#!/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

1 个答案:

答案 0 :(得分:1)

尝试逐步编写脚本。而不是编写20个语句然后尝试一次调试它们,一次写一个语句并测试以确保它在写下一个语句之前有效。

如果您运行,例如

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

本身,你会发现它不起作用。然后,您可以更具体地了解问题所在,并且您可以在Google或Stackoverflow上查找类似“bash if variable greater than”的内容。

查看bash tag wiki以获取有关调试和询问代码的更多有用提示。

你会找到的东西包括:

  1. if必须为小写
  2. then
  3. 之前,您需要换行符或分号
  4. 要查看变量是否大于,请使用[[ $a -gt 2 ]]
  5. 要查看数组元素是否不相等,请使用[[ ${inside[0]} != "remora.txt" ]]
  6. 管道导致子壳。请改用while read ...; do ...; done < <(somecommand)