作者:低碳的S | 来源:互联网 | 2023-05-17 10:55
一、-path -prune用法
背景介绍:
在使用linux查找文件时,有些目录不需要查找,在查到这些目录时会打印很多无用提示信息,如:
方法:
使用-path -prune参数达到屏蔽这些目录的效果
排除一个:find ./ -path /proc -prune -o -name target_file -type d -print
排除多个:find ./ (-path /proc -o -path ./cs ...) -prune -o -name target_file -type d -print
其中-path 参数必须在查找路径后边才会生效 -prune -o 而单词prune为修剪的意思,后边还有参数-o,是'或者'的意思
如果/proc目录存在则
二、文件名中存在特殊符号
如果文件名中含有特殊符号如[],()时,直接搜索文件会查找不到,因为这些符号会有特殊含义如‘[]’表示匹配范围,与正则表达式中的[]有相同用处,因此在搜索这类文件时,需要将其进行转义\[\],然后再用引号引起来,单、双都行,举例子:要查找文件
命令:
find ./ -name 'faceid_id\[1\]_gendor_1_index_70_\[65,206,292,432\]_227x226.bmp'
这里可以用通配符中的[]来匹配括号中的数字
find ./ -name 'faceid_id\[1\]_gendor_1_index_70_\[[3-7]*,206,292,432\]_227x226.bmp'
,未加转义符的[3-7]表示匹配数字范围,*表示要匹配的数量是随意的。
三、限定查找的目录层深
find . -mindepth 1 -maxdepth 2 -iname A[1-9]2* -type d
该命令表示查找当前目录下的子目录及子目录的子目录名字符合A开始,后跟两个数字的模式目录。
四、嵌套查找
有时查找的一些文件会存放在符合某些模式的且层深稳定的路径下,尤其是在本地电脑上查找时,通过限定层深与模式,再在这些匹配到的目录下进行文件查找,可以加快查找过程,命令为:
find $(find -mindepth 1 -maxdepth 2 -iname a[1-9]*) -name filename -type f
或者
find `find -mindepth 1 -maxdepth 2 -iname a[1-9]*` -name filename -type f
$() 与``都是一个作用,将括号或反引号中的语句当命令优先执行
五、查找文件后重命名
查找某些格式的文件,然后修改文件名,以下两种命令都可以达到目的
find -name "*.bak" -exec rename 's/\.bak//' {} \;
find -name "*.bak" | xargs rename 's/\.bak//'