Linux命令之 find 详解

Linux find 命令用于在指定目录下查找文件和目录。

选项 说明
-P(upper) 查找时指定为目录本身而不是符号链接
-L 查找时指定为目录符号链接
-ignore_readdir_race 忽略错误信息
-warn, -nowarn 打开关闭警告信息
-amin n 上次访问文件是在n分钟以内
-anewer file 上次访问的时间比修改的时间晚的文件或目录
-atime n*24 搜索访问时间在n*24小时之前的文件或目录
-cmin n 文件的状态上次更改是在n分钟前。
-empty 返回空文件或者空目录
-gid n 返回文件组id为n的文件
-group gname 返回输入符合组名的文件
-ilname/iname 用文件名搜索,忽略大小写
-inum n 根据索引号搜索文件或目录
-ipath 根据给定的目录列出符合目录的所有文件, 忽略大小写
-links n 列出有n个链接的文件
-iregex 正则匹配, 忽略大小写
-mmin n 列出上次修改文件是在n分钟之内
-name 列出符合条件的文件或目录
-nogroup 没有组对应于文件的数字组ID。
-nouser 没有用户对应于文件的数字用户ID。
-path 目录名要符合搜索项, 不包含/和.
-size n[cwbkMG] 列出占用空间大于n的文件或目录
+ 大于某个值
- 小于某个值
-type [bcdpflsD] 指定要查找的格式,f表示查找文件,d表示查找目录
-uid n 文件的数字用户ID为n。
-used n 上次访问文件是在修改文件后的第n天
-user uname 文件由用户uname拥有(允许数字用户ID)。
-ctime
# 列出当前目录及子目录下所有文件和文件夹
find .
# 在/home目录下查找以.txt结尾的文件名
find /home -name "*.txt"
# 在/home目录下查找以.txt结尾的文件名,但忽略大小写
find /home -iname "*.txt"
# 当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find . -name "*.txt" -o -name "*.pdf" 
# 基于正则表达式匹配文件路径
find . -regex ".*\(\.txt\|\.pdf\)$"
# 基于正则表达式匹配文件路径,但忽略大小写
find . -iregex ".*\(\.txt\|\.pdf\)$"
# 找出/home下不是以.txt结尾的文件
find /home ! -name "*.txt"
# 根据文件类型进行搜索,# 类型参数列表:f 普通文件,l 符号连接,d 目录,c 字符设备,b 块设备,s 套接字,p Fifo
find . -type type
# 向下最大深度限制为3
find . -maxdepth 3 -type f
# 搜索出深度距离当前目录至少2个子目录的所有文件
find . -mindepth 2 -type f
# 根据文件时间戳进行搜索:(访问时间:±atime/天,±amin/分钟 用户最近一次访问时间)(修改时间(±mtime/天,±mmin/分钟):文件最后一次修改时间)(变化时间(±ctime/天,±cmin/分钟):文件数据元(例如权限等)最后一次修改时间)
find . -type f 时间戳
# 搜索最近七天内被访问过的所有文件
find . -type f -atime -7
# 搜索恰好在七天前被访问过的所有文件
find . -type f -atime 7
# 搜索超过七天内被访问过的所有文件
find . -type f -atime +7
# 搜索访问时间超过10分钟的所有文件
find . -type f -amin +10
# 找出比file.log修改时间更长的所有文件
find . -type f -newer file.log
# 找出比file.log修改时间更长的所有文件
find . -type f -newer file.log
# 根据文件大小进行匹配(文件大小单元:b —— 块(512字节),c —— 字节,w —— 字(2字节),k —— 千字节,M —— 兆字节,G —— 吉字节
find . -type f -size 文件大小单元
# 搜索大于或小于20Mb的文件
find . -type f -size ±20Mb
# 删除当前目录下所有.txt文件
find . -type f -name "*.txt" -delete
# 当前目录下搜索出权限为755的文件
find . -type f -perm 755
# 找出当前目录下权限不是755的php文件
find . -type f -name "*.php" ! -perm 755
# 找出当前目录用户tom拥有的所有文件
find . -type f -user tom
# 找出当前目录用户组sunk拥有的所有文件
find . -type f -group sunk

# 找出当前目录下所有root的文件,并把所有权更改为用户tom
find .-type f -user root -exec chown tom {} \;
# 找出自己家目录下所有的.txt文件并删除
find $HOME/. -name "*.txt" -ok rm {} \;
# 查找当前目录下所有.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 \;
# 找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
# 单行命令中-exec参数中无法使用多个命令,以下方法可以实现在-exec之后接受多条命令
-exec ./text.sh {} \;
# 查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk
find . -path "./sk" -prune -o -name "*.txt" -print
# 要列出所有长度为零的文件
find . -empty
# 查看文件内容
find ./ -name *.verf -exec cat {} \; | sort
# 复制文件第一种写法
find ./ -type f -iname '*.verf' | xargs cp -t /目标路径
# 复制文件第二种方法,xargs 有一个参数 -i 可以把捕获的结果放入{}中,感觉这样更符合我们常用的语法,上题命令应该这样写:
find /data/ -type f -name "*.txt" | xargs -i cp {} /grk/
# 复制文件第三种写法
find /data/ -type f -name"*.txt" -exec cp {} /grk/ \;

你可能感兴趣的:(Linux,linux,运维,服务器)