所以我有一个bash脚本,它可以进入一个目录,执行命令然后退出并再次进入一个新目录:
for d in ./*/ ; do (cd "$d" && somecommand); done
来自here。
不幸的是,我不确定如何压缩它所在的目录(可能使用诸如7z这样的东西)。这是一个很长的镜头,但我尝试了这个命令,它没有工作(我没想到星号取目录的名称......但我希望):
7z a -r *.zip
我不认为有人有任何建议吗?
答案 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文件保留在原始工作目录(所有压缩目录的父目录)中,但它们可以很容易地放入子目录中。