以下是我正在处理的问题
我在不同的目录中有一堆文件,它们都在一个根目录中。我扫描了所有这些文件夹,并在其中拾取文件,避免使用某些特定的子目录。我必须避免的这些文件夹来自配置文件。为此,我准备了这个find命令(有一些帮助)
find ${ROOT}/au* -type f -not \( -path '*auction123/incoming*' -o -path '*autobase/incoming*'* \)
此处ROOT也来自配置文件。我还能为这个
提供占位符吗?-path '*auction123/incoming*' -o -path '*autobase/incoming*'*
这样我就可以在find中添加任何必须忽略的文件夹。我在一些地方看到用grep找到的是更好的选择。
答案 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匹配的模式列表(在这种情况下会过滤掉)。