shell脚本中的动态查找

时间:2012-11-20 16:06:38

标签: shell unix

以下是我正在处理的问题

我在不同的目录中有一堆文件,它们都在一个根目录中。我扫描了所有这些文件夹,并在其中拾取文件,避免使用某些特定的子目录。我必须避免的这些文件夹来自配置文件。为此,我准备了这个find命令(有一些帮助)

find ${ROOT}/au* -type f -not \( -path '*auction123/incoming*' -o -path '*autobase/incoming*'* \)

此处ROOT也来自配置文件。我还能为这个

提供占位符吗?
-path '*auction123/incoming*' -o -path '*autobase/incoming*'*

这样我就可以在find中添加任何必须忽略的文件夹。我在一些地方看到用grep找到的是更好的选择。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

find ${ROOT}/au* -type f | grep -v -f files_containing_list_of_ignore_directories

files_containing_list_of_ignore_directories将您希望忽略的每个目录放在一个单独的行上(没有通配符*)。

files_containing_list_of_ignore_directories应该是这样的:)

auction123/incoming
autobase/incoming
...

<强>解释

  • find ${ROOT}/au* -type f:递归查找au*
  • 中与${ROOT}匹配的任何目录下的所有文件
  • |是shell中的管道运算符:它表示“从上一个命令(在本例中为stdout)中输出find的任何内容,并将该输出提供给{{ 1}}下一个命令(在本例中为stdin
  • grep:调用grep,一种用于搜索的工具
  • grep:对-v使用--invert-match选项。基本上它意味着“过滤掉”匹配的任何东西。
  • grep:提供一个文件,其中包含您希望grep匹配的模式列表(在这种情况下会过滤掉)。