【问题标题】:Zip folders without parent folder没有父文件夹的 Zip 文件夹
【发布时间】:2018-05-16 16:19:47
【问题描述】:

首先,我在这里阅读了很多关于这个主题的帖子,但到目前为止没有任何帮助,例如

Zipping without creating parent folder Unix zipping sub directory not including parent directory

这就是我想要的。我有以下文件夹结构:

- root
-- subroot
--- subsubroot
---- file1.foo
---- file2.foo
---- file3.foo
---- file4.foo

解压后的结果应该是

file1.foo
file2.foo
file3.foo
file4.foo

关键在于file*.foo 只是包,因此基本上是文件夹本身,所以我尝试将-j 选项与我的递归选项(-r)结合使用,但后来我得到了一个扁平的层次结构所有文件。

我当前的 shell 命令如下所示:

find root/subroot/subsubroot -name '*.foo' | grep -v somestring | xargs -I % zip -r foos.zip %

但是,其结果将与包含所有父文件夹的原始结构完全相同。

我不一定非得使用zip 命令,但生成的文件必须是zip

【问题讨论】:

    标签: macos shell terminal zip


    【解决方案1】:

    您的命令几乎是正确的,尽管您不需要使用-I 选项。

    目录结构

    .
    └── root
        └── subroot
            └── subsubroot
                ├── foo1
                │   └── foo1.pkg
                ├── foo2
                │   └── foo2.pkg
                ├── foo3
                │   └── foo3.pkg
                ├── fooA.pkg
                ├── fooB.pkg
                ├── fooC.pkg
                └── nope.pkg
    

    命令

    find root/subroot/subsubroot -name '*.pkg' | grep -v "nope" | xargs zip -jr foo 
    

    生成的 foo.zip

    fooA.pkg
    fooB.pkg
    fooC.pkg
    foo1.pkg
    foo2.pkg
    foo2.pkg
    

    有一个警告。

    如果你有这种类型的目录结构,你会得到一个错误:

    .
    └── root
        └── subroot
            └── subsubroot
                ├── foo1
                │   └── foo1.pkg
                ├── foo2
                │   └── foo2.pkg
                ├── foo3
                │   └── fooC.pkg
                ├── fooA.pkg
                ├── fooB.pkg
                ├── fooC.pkg
                └── nope.pkg 
    

    错误

    zip warning:   first full name: root/subroot/subsubroot/foo3/fooC.pkg
                   second full name: root/subroot/subsubroot/fooC.pkg
                   name in zip file repeated: fooC.pkg
                   this may be a result of using -j
    

    您需要注意子目录中的文件/包没有相同的文件名,否则您会遇到fooC.pkg 所示的问题。假设情况并非如此,因为您正在尝试创建平面存档。

    【讨论】:

    • 啊,我忘了说我也试过了。不幸的是,我确实面临同样的问题,因为每个包都包含一个同名的文件,并且包也会被遍历——我想是由于递归选项。但是,我实际上不希望它在找到*.pkg 文件后继续遍历。
    • 你可以使用 maxdepth 和 find 或许。 zip 工具不应该在 .pkg 文件中遍历,因为我复制了同一个文件,只是使用了不同的文件名而没有问题。我不确定您实际指的是哪种类型的包,但如果它只是一个目录,那么这很可能是问题所在。
    • 这是一个dSYM,所以基本上只是一个容器。我会尝试maxdepth编辑maxdepth 没有改变任何东西。
    • 我最终选择只运行:cd root/subroot/subsubroot/ && zip -r outputFile.zip *.dSYM && mv outputFile.zip ../../../ && cd ../../.. Ugly 一如既往,但至少它有效。
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2020-08-13
    • 2013-10-22
    • 2016-01-10
    • 2012-06-11
    • 2023-03-25
    相关资源
    最近更新 更多