是否可以从 find 命令中排除目录?

是否可以从 find 命令中排除目录?

我正在使用find -type f命令递归地查找某个起始目录中的所有文件。但是,我希望阻止某些目录输入和提取其中的文件名称。所以基本上我正在寻找类似的东西:

find . -type f ! -name "avoid_this_directory_please"

有没有一个有效的替代方案?

答案1

该选项的用途如下-prune

find . -type d -name 'avoid_this_directory_please' -prune -o \
    -type f -print

您可以将上面的内容解释为“如果有一个名为 的目录avoid_this_directory_please,则不要输入它,否则,如果它是常规文件,则打印其路径名。”

您还可以根据任何其他条件修剪目录,例如顶级搜索路径中的完整路径名:

find . -type d -path './some/dir/avoid_this_directory_please' -prune -o \
    -type f -print

答案2

要避免使用目录,请尝试 -path 测试:

find . -type f ! -path '*/avoid_this_directory_please/*'

答案3

man find,在该-path部分中,显然结合了其他 2 个答案

To  ignore a whole directory tree, use -prune rather than
checking every file in the tree.  For example, to skip the directory
`src/emacs'  and  all  files and directories under it, and print the
names of the other files found, do something like this:

          find . -path ./src/emacs -prune -o -print

答案4

尝试这个

find -name "*.js" -not -path "./directory/*"

相关内容