如何 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 文件保留在原始工作目录(所有被压缩目录的父目录)中,但它们可以很容易地放入子目录中。
所以我有一个 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 文件保留在原始工作目录(所有被压缩目录的父目录)中,但它们可以很容易地放入子目录中。