1

这是我正在解决的问题

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

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

这里的 ROOT 也将来自配置文件。我也可以为此提供一个占位符吗

-path '*auction123/incoming*' -o -path '*autobase/incoming*'*

这样我就可以添加任意数量的文件夹,这些文件夹必须在查找中被忽略。我在一些地方读到 grep 是一个更好的选择。

4

1 回答 1

0

你可以做:

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

wherefiles_containing_list_of_ignore_directories将您希望忽略的每个目录放在单独的行上(不带通配符*)。

(这files_containing_list_of_ignore_directories应该是这样的:)

auction123/incoming
autobase/incoming
...

解释:

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