Zip文件夹没有父文件夹

时间:2018-05-16 16:19:48

标签: macos shell terminal zip

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

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

1 个答案:

答案 0 :(得分:0)

您的命令几乎是正确的,但您不需要使用-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所示的问题。它假设情况并非如此,因为您正在尝试创建平面存档。