如何 cd 到多个目录,压缩它(以目录名命名)?

How to cd into multiple directories, zip it (naming it after the directory name)?

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

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

来自 here.

不幸的是,我不确定如何压缩它所在的目录(可能使用诸如 7z 之类的目录)。这是一个远景,但我尝试了这个命令但它没有用(我没想到星号会占用目录的名称......但我希望):

7z a -r *.zip

我想没有人有任何建议吗?

变量 $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 命令是正确的。

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

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

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