查找命令排除或忽略文件(例如,忽略所有隐藏的.点文件)

时间:2020-01-09 14:16:26  来源:igfitidea点击:

使用find命令搜索文件时,如何忽略所有隐藏的.点文件?
在运行Linux或UNIX find命令时如何忽略或排除某些文件?

find命令支持标准的UNIX正则表达式来匹配,包含或排除文件。
您可以使用regex轻松编写复杂的查询,而find命令以递归的方式列出列出的每个/file/to/path的目录树,从而评估表达式。

查找命令排除或忽略文件语法

语法如下:

##################
## Basic syntax ##
##################
find /dir/to/search/ -options -name 'pattern' -action
find /dir/to/search/ -options -iname 'pattern' -action
find /dir/to/search/ -type f -name 'pattern' -print
find /dir/to/search/ -type f -name \( expression \) -print
 
## ---------------------------------------------------------------------- ##
## The -and operator is the logical AND operator                          ## 
find /dir/to/search/ -type f -name 'expression -and expression' -print
 
## ---------------------------------------------------------------------- ##
## The -or operator is the logical OR operator.  The expression evaluates ##
## to true if either the first or the second expression is true.          ##
find /dir/to/search/ -type f -name 'expression -or expression' -print

示例:查找命令和逻辑运算符

查找任何名称以c或asm结尾的文件,执行:

$ find . -type f \( -iname "*.c" -or -iname "*.asm" \)

在此示例中,在/etc /目录中找到所有* .conf和(.txt)文本文件:

$ find . -type f \( -name "*.conf" -or -name "*.txt" \) -print

括号必须用反斜杠 \(and \)进行转义,以防止将其解释为特殊的shell字符。

-type f选项强制查找仅搜索文件而不搜索目录。

-or运算符可以找到.c或.asm文件。

了解查找命令运算符

操作员根据测试和操作构建一个复杂的表达式。
运算符按降序排列:

(expr)强制优先级。如果expr为true,则为true
expr -not expr``! expr如果expr为假则为真。在某些shell中,有必要保护!从shell解释中引用它。
expr1-和expr2expr2如果expr1为假,则不进行评估。
expr1-或expr2expr2如果expr1为true,则不评估。

警告!-or,-and和-not运算符不适用于所有版本的find。
通常,GNU find支持所有选项。

如何在搜索文件时忽略隐藏的.dot文件?

查找* .txt文件,但忽略隐藏的.txt文件,例如.vimrc或.data.txt文件:

$ find . -type f \( -iname "*.txt" ! -iname ".*" \)

查找所有.dot文件,但忽略.htaccess文件:

$ find . -type f \( -iname ".*" ! -iname ".htaccess" \)

-path选项

如果所检查的路径名与模式匹配,则此选项返回true。
例如,在当前目录中找到所有* .txt文件,但不包括./Movies/、./Downloads/和./Music/文件夹:

cd $HOME
find . -type f -name "*.txt" ! -path "./Movies/*" ! -path "./Downloads/*" ! -path "./Music/*" 
 
## add -ls option to get ls -l kind of output ##
find . -type f -name "*.txt" ! -path "./Movies/*" ! -path "./Downloads/*" ! -path "./Music/*" -ls