日常工作中常用到脚本,像数据备份、数据压缩等等这样一些脚本。
find命令的优点:条件比较多应用场景广范,缺点:效率比较低,速度比较慢。
1、文件查找之find命令
(1) 语法格式:
find [路径] [选项] [操作]
1). 路径:可以写相对路径,也可以写绝对路径。
2). 选项参数对照表:
[1] -name :根据文件名查找
[2] -perm :根据文件权限查找,如权限777,通常是一个数字
[3] -prune :该选项可以排除某些查找目录
[4] -user :根据文件属主查找
[5] -group :根据文件属组查找
[6] -mtime -n | +n :根据文件更改时间查找,n是以天为单位计算的
[7] -mmin -n | +n :根据文件更改时间查找,n是以分钟为单位计算的
[8] -nogroup:查找无有效属组的文件,比如添加某一个用户,在这个用户产出很多文件,有一天你这个用户名被删除掉了,剩下的文件就是没有有效属组文件。
[9] -nouser:查找无有效属主的文件
[10] -newer file1 ! file2:查找更改时间比file1新但比file2旧IDE文件,正确shell使用格式:find . -newer file1 \! \( -newer file2 \),点,空格,转义,缺一不可,否则都会报错。
[11] -type:按文件类型查找
[12] -size -n +n:按文件大小查找
[13] -mindepth n:从n级子目录开始搜索
[14] -maxdepth n:最多搜索到n级子目录
3). 操作:
[1] -print: 打印输出
[2] -exec: 对搜索到文件执行特定的操作,格式为:【-exec 'command' {} \;】,command表示要执行的命令,{}一对大括号表示匹配前面搜索到结果,“\;”反斜杠分号固定写法。
例子1: 搜索/etc下的文件(非目录),文件名以conf结尾,且大于10k,然后将其删除
find ./etc/ -type f -name '*.conf' -size +10k -exec rm -f {} \;
例子2: 将/var/log/目录下以log结尾的文件,且更改时间在7天以上的删除
find /var/log/ -name '*.log' -mtime +7 -exec rm -rf {} \;
例子3: 搜索条件和例子1一样,只是不删除,而是将其复制到/root/conf/目录下
find ./etc -size +10k -type f -name '*.conf' -exec cp {} ./test_5/ \;[3] -ok: 和exec功能一样,只是每次操作都会给用户提示。
4).逻辑运算符:
-a 与
-o 或
-not | ! 非
例子1:查找当前目录下,属主不是hdfs的所有文件
find . -not -user hdfs | find . ! -user hdfs
例子2:查找当前目录下,属主属于hdfs,且大小大于300字节的文件
find . -type f -a -user hdfs -a -size +300c
例子3:查找当前目录下的属主为hdfs 或者以 xml 结尾的普通文件
find . -type f -a \( -user hdfs -o -name '*.xml' \)
















