查找未按预期执行的命令

时间:2016-10-20 13:33:56

标签: linux centos find pattern-matching

我想查找文件名掩码模式为filemask1filemask2的所有文件,并排除指定目录中包含的unwanted*模式。我正在尝试运行以下内容:

find dir/ other_dir/ parent/child/dir/ parent/child/other_dir/ parent/other_dir/ -iname '*filemask1*' -o -iname '*filemask2*' ! -iname '*unwatned1*' ! -iname '*unwanted2*' ! -iname '*unwanted3*' ! -iname '*unwanted4*'  ! -iname '*unwanted5*' ! -iname '*unwanted6*' ! -iname '*.xls*'

我正在从包含我正在尝试搜索的每个路径的目录中执行此操作。上面给出了指定目录中的所有文件,但不排除不需要的模式。

find dir/ other_dir/ parent/child/dir/ parent/child/other_dir/ parent/other_dir/ \(-iname '*filemask1*' -o -iname '*filemask2*'\) ! -iname '*unwatned1*' ! -iname '*unwanted2*' ! -iname '*unwanted3*' ! -iname '*unwanted4*'  ! -iname '*unwanted5*' ! -iname '*unwanted6*' ! -iname '*.xls*'

给了我:

find: invalid expression; you have used a binary operator '-o' with nothing before it.

虽然

find dir/ other_dir/ parent/child/dir/ parent/child/other_dir/ parent/other_dir/ ! -iname '*unwatned1*' ! -iname '*unwanted2*' ! -iname '*unwanted3*' ! -iname '*unwanted4*'  ! -iname '*unwanted5*' ! -iname '*unwanted6*' ! -iname '*.xls*' \(-iname '*filemask1*' -o -iname '*filemask2*'\)

给了我

find: paths must precede expression: (-iname
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

我是否遗漏了有关如何解释这一点的内容?有没有办法简化这个,所以它不是那么冗长?我知道拥有更好的文件名可以缓解很多问题,但我无法控制它:/

如果任何人都可以包含一种方法来修剪多个目录模式,这些目录将包含在指定的搜索目录中

1 个答案:

答案 0 :(得分:1)

如果我理解你的第一个问题的答案就是分别对想要和不需要的名字进行分组。

find \
dir/ other_dir/ parent/child/dir/ parent/child/other_dir/ parent/other_dir/ \
\( -iname '*filemask1*' -o -iname '*filemask2*' \) \
! \( -iname '*unwatned1*' -o -iname '*unwanted2*' -o -iname '*unwanted3*' -o -iname '*unwanted4*' -o -iname '*unwanted5*' -o -iname '*unwanted6*' -o -iname '*.xls*' \)

也可以通过简单的正则表达式排除不需要的目录。