如何查找给定扩展名的所有文件,不包括多个文件名字符串

how to find all files of a given extension excluding multiple filename strings

我正在尝试 'find' 所有匹配“*.gz”的文件,然后解压它们,但同时排除多个文件名字符串。

我当前使用的 bash 字符串是:

find . -name '*.gz' ! -name *dvportgroups* ! -name *nsanity* ! -name *vcsupport* ! -name *viclient* ! -name vsantraces* -exec gunzip -vf {} \;

不幸的是,虽然这成功地忽略了 *dvportgroups* 它仍然试图解压缩我希望避免的其他文件。

这与我 运行:

时的结果相同
find . -name '*.gz' ! -name *dvportgroups* -exec gunzip -vf {} \;

我想知道如何 'find' 所有匹配 *.gz 的文件但排除多个文件名字符串。

FWIW 这是在 bash 4.2 机器上 运行ning RHEL 6.

我猜测您要排除的许多文件在当前目录中都有匹配项,因此需要引用。

试试这个:

find . -name '*.gz' ! -name '*dvportgroups*' ! -name '*nsanity*' ! -name '*vcsupport*' ! -name '*viclient*' ! -name 'vsantraces*' -exec gunzip -vf {} \;

如果这不起作用,请将 -exec ... 替换为 -print 并更清楚地查看结果。我只是做了一个类似的命令(只更改模式以匹配我的文件并将 -exec ... 更改为 -print0)并且它在我的系统上运行良好。