for-loop over directory to zip子目录

时间:2017-03-30 13:56:15

标签: bash for-loop

我的问题很简单,但是自从我上次阅读bash-scripts以来已经太久了,所以我再也听不懂bash了......

我有一个包含x子文件夹的文件夹(包含空格的名称)。现在我想将每个子文件夹压缩到自己的zip存档中。

以下脚本就是我所拥有的:

#!/bin/bash
cd $1
for folder in $1/* do
zip -r "${folder%/}" "${folder%/}"
done

每当我尝试用./test.sh .执行它时,我就会得到

./test.sh: line 4: syntax error near unexpected token `zip'
./test.sh: line 4: `zip -r "${folder%/}" "${folder%/}"'

我的想法有什么问题?为什么?

如果我在shell中输入变量(例如file="subfolder i want to zip")并执行zip -r "${file}" "${file}",它就可以正常运行一个文件夹。

我感谢任何帮助,希望我的问题能够轻松解决(所以我能理解它)。 非常感谢。

4 个答案:

答案 0 :(得分:3)

试试这个 -

#!/bin/bash
cd $1
for folder in $1/*
do
zip -r "${folder%/}" "${folder%/}"
done

";"之后放$1/*或在下一行使用do。

答案 1 :(得分:2)

do

之前需要一个分号
for folder in $1/*; do
  zip -r "${folder%/}" "${folder%/}"
done

这需要消除语法歧义,特别是指示不再需要迭代的字符串"。例如。这允许迭代shell关键字:

for k in do if done; do
  ...
done

答案 2 :(得分:1)

如果要使用shell工具,可以使用for循环,如其他答案中所示。如果你能负担得起另一个应用程序,如find,那么这是一个单行程序:

find "${1}" -maxdepth 1 -mindepth 1 -type d -exec zip -r "{}.zip" "{}" \;

答案 3 :(得分:1)

有人已经提到过,但你需要在do

之前使用半色

我还建议你检查一下你是否真的要拉上目录。

#!/bin/bash
cd $1
for folder in $1/* ; do
    [ -d $folder ] && zip -r "${folder%/}" "${folder%/}"
done