为什么不能使用find和zip压缩所有文件?

时间:2019-05-26 11:35:18

标签: shell find zip xargs

我具有以下文件夹结构

.
├── 5.avi
├── a
│   ├── 1.avi
│   ├── b
│   │   └── 2.avi
│   └── c
│       └── 3.avi
└── b
    ├── 4.avi
    ├── l
    └── s

我正在使用以下命令压缩所有avi文件:

find .  -iname *avi | xargs zip videos.zip

问题在于find仅返回5.avi,但是如果5.avi不存在,则find返回其余文件。

如何解决它并包含所有avi文件?

1 个答案:

答案 0 :(得分:2)

在将参数传递给命令(在您的情况下为*)之前,外壳程序会展开星号(find)。实际的命令看起来像

find . -iname 5.avi

您可以通过在命令前加上echo来进行测试,例如

echo find . -iname *avi

您想要做的就是将*avi原样传递给命令。为此,必须将星号放在引号中,或使用反斜杠将其转义。您的命令应为:

find . -iname '*.avi' | xargs zip videos.zip