gpt4 book ai didi

bash - 在 bash 脚本中创建 zip 存档时仅包含子目录

转载 作者:行者123 更新时间:2023-12-04 06:07:44 25 4
gpt4 key购买 nike

我有一个看起来像这样的目录结构:

basedir/dir1/dir2/dir3/dir4/myzip/subdirs

我想创建 myzip 目录及其所有子目录的存档,但不在 zip 存档中包含 dir1 到 dir4,并将生成的存档 myzip.zip 保存在 basedir 中。

这不起作用,因为 dir1 到 4 包含在存档中
cd basedir
zip -r myzip.zip dir1/dir2/dir3/dir4/myzip

我知道我可以这样做
cd basedir/dir1/dir2/dir3/dir4
zip -r ../../../../myzip.zip myzip
cd ../../../..
# Need to go back to basedir for next commands

这也有效
cd basedir
cp -r dir1/dir2/dir3/dir4/myzip myzip
zip -r myzip.zip myzip
rm -rf myzip
# Kind of annoying to have to copy then remove

有没有更优雅的方法来做到这一点?我希望我可以在我输入的第一个命令中添加一些参数,使其在一行中以我想要的方式工作。

我想做的不也是大多数人想做的吗? IMO,默认情况下,他们应该只在 zip 命令中包含子目录。

我不明白当前 zip 实现的意义,因为所有这些都做同样的事情:
zip -r myzip.zip dir1/dir2/dir3/dir4/myzip
zip -r myzip.zip dir1/dir2/dir3/dir4
zip -r myzip.zip dir1/dir2/dir3/
zip -r myzip.zip dir1/dir2/
zip -r myzip.zip dir1/

编写 zip 命令以便默认情况下仅包含子目录不是更聪明吗?

然后,如果您想要包含 dir1 到 dir4,您可以这样做:
myVersionOfZip -r myzip.zip dir1

如果您只想要 myzip 的子目录,您可以这样做:
myVersionOfZip -r myzip.zip dir1/dir2/dir3/dir4/myzip

最佳答案

如果使用 pushd,则可以避免使用 cd ../../../..。

pushd basedir/dir1/dir2/dir3/dir4
zip -r myzip.zip myzip
popd

存档工具旨在保留路径信息,所以我怀疑是否有办法解决您想要的问题。

这将使您的脚本更加优雅。

关于bash - 在 bash 脚本中创建 zip 存档时仅包含子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8158137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com