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

时间:2015-03-05 22:18:31

标签: bash find exec

我正在尝试'找到'匹配“* .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 {} \;

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

FWIW这是在运行RHEL 6的计算机上的bash 4.2下。

1 个答案:

答案 0 :(得分:0)

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

试试这个:

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

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