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

Why cannot compress all files with find and zip?

我有以下文件夹结构

.
├── 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只有returns5.avi,但是如果5.avi不存在,findreturns其余文件。

如何解决它并压缩所有 avi 个文件?

shell 在将参数传递给命令之前扩展星号 (*)(在您的例子中是 find)。实际命令看起来像

find . -iname 5.avi

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

echo find . -iname *avi

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

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