四剑客之find 命令在文件系统中搜索文件和目录。
find 命令是用来在指定目录下查找文件,在参数之前的任何字符串都会当作是目录名。使用 find 命令时,如何不设置任何参数,则 find 命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部显示出来。
find与xargs和管道符配合”
find -exec 必须有{} \;
xargs不支持别名
语法: find(选项)(参数)
-type #根据文件类型查找,f与d
-name #根据名称查找,”名称”
-iname #不区分大小写,名称查找,”名称”
-size #按大小查找,大于用+,小于用-
-mtime #按修改时间查找(+7是7天前,-7是7天后)
-exec #查询后的数据输出到后面的命令(后面必须有{} \;)
find / -type f -name "hosts" #从根下找名称为“hosts”的文件
find /etc/ -size +1M #查找/etc/下大于1M的文件或目录
find /olda/ -name '*.log' |xargs ls -l #查看搜索到的文件详细信息
find /olda/ -name '*.log' -exec ls -l {} \; #查看搜索到的文件详细信息
find /etc/ -name "*.conf" -type f |xargs tar zcfP /tmp/conf_$(date +%F).tar.gz #压缩查询后的文件
find /etc/ -name "*.conf" -type f -exec tar zcfP conf__$(date +%F).tar.gz {} \; #压缩查询后的文件
find /olda/ -type f -mtime +7 -exec rm -f {} \; #查找一个删除一个
find /olda/ -name "*.log" -exec cp {} /opt/ \; #查找一个复制一个
使用实例:
根据文件或者正则表达式进行匹配
在/home目录下查找以.txt结尾的文件名
find /home -name "*.txt"
同上,但忽略大小写
find /home -iname "*.txt"
当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find . \( -name "*.txt" -o -name "*.pdf" \)
或
find . -name "*.txt" -o -name "*.pdf"
匹配文件路径或者文件
find /usr/ -path "*local*"
基于正则表达式匹配文件路径
find . -regex ".*\(\.txt\|\.pdf\)$"
同上,但忽略大小写
find . -iregex ".*\(\.txt\|\.pdf\)$"
根据文件类型进行搜索
find . -type 类型参数
类型参数列表:
f 普通文件
l 符号连接
d 目录
c 字符设备
b 块设备
s 套接字
p Fifo
借助-exec选项与其他命令结合使用
找出当前目录下所有root的文件,并把所有权更改为用户tom
find .-type f -user root -exec chown tom {} \;
上例中,{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
找出自己家目录下所有的.txt文件并删除
find $HOME/. -name "*.txt" -ok rm {} \;
上例中,-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。
查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中
find . -type f -name "*.txt" -exec cat {} \;> all.txt
将30天前的.log文件移动到old目录中
find . -type f -mtime +30 -name "*.log" -exec cp {} old \;