如何cd成多个目录,压缩它(在目录名后命名)?

时间:2016-01-08 15:38:12

标签: bash zip 7zip

所以我有一个bash脚本,它可以进入一个目录,执行命令然后退出并再次进入一个新目录:

for d in ./*/ ; do (cd "$d" && somecommand); done

来自here

不幸的是,我不确定如何压缩它所在的目录(可能使用诸如7z这样的东西)。这是一个很长的镜头,但我尝试了这个命令,它没有工作(我没想到星号取目录的名称......但我希望):

7z a -r *.zip

我不认为有人有任何建议吗?

2 个答案:

答案 0 :(得分:2)

变量$d包含目录的名称(以及其他内容):

for d in ./*/ ; do (
    cd "$d"
    dirname=${d%/} # remove trailing /
    dirname=${dirname##*/} # remove everything up to the last /
    7z a -r "$dirname".zip
)
done

我假设你的7z命令是正确的。

答案 1 :(得分:2)

也许你正在寻找这样的东西:

for d in *; do
  test -d "$d" && zip -r "$d.zip" "$d"
done

检查工作目录中名称不以“。”开头的所有文件。 (for d in *)。对于那些是目录(test -d $d)的目录,它以递归方式将目录内容压缩为目录的成员。 zip文件保留在原始工作目录(所有压缩目录的父目录)中,但它们可以很容易地放入子目录中。