首先,我已经在这里阅读了很多关于这个主题的帖子,但到目前为止还没有任何帮助,例如。
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
。
答案 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
所示的问题。它假设情况并非如此,因为您正在尝试创建平面存档。