我的问题很简单,但是自从我上次阅读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}"
,它就可以正常运行一个文件夹。
我感谢任何帮助,希望我的问题能够轻松解决(所以我能理解它)。 非常感谢。
答案 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