linux find 命令用法整理

find path -option [ -print ] [ -exec -ok command ] {} \;

path: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print 将查找到的文件输出到标准输出
-exec command {} \; 将查到的文件执行command操作,{} 和 \;之间有空格;{}标识匹配到的文件路径或文件名
-ok 和-exec相同,只不过在操作前要询用户
===========================  option  ====================
-name filename  #查找名为filename的文件
-perm          #按执行权限来查找
-user username    #按文件属主来查找
-group groupname   #按组来查找
-mtime -n +n   #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n    #按文件访问时间来查GIN: 0px">
-ctime -n +n    #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup    #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser    #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2    #找文件,-n指n天以内,+n指n天以前
-ctime -n +n    #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup    #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser    #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2     #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f  #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c]  #查长度为n块[或n字节]的文件
-depth    #使查找在进入子目录前先行查找完本目录
-fstype    #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f    #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c]   #查长度为n块[或n字节]的文件
-depth    #使查找在进入子目录前先行查找完本目录
-fstype    #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount   #查文件时不跨越文件系统mount点
-follow    #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %;   #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount   #查文件时不跨越文件系统mount点
-follow    #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio      #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune   #忽略某个目录
========================================================

以下总结一些实例:

基于文件类型:
find . -type d -print     #只列出当前目录所有的子目录
find . ! -type d -print  #只列出当前目录的非子目录(文件)
find . -type f -print     #只列出当前目录所有的文件
find . -type l -print     #只列出当前目录的所有符号链接
find . -type c -print    #只列出当前目录的所有字符设备
find . -type b -print    #只列出当前目录的所有块设备
find . -type s -print    #只列出当前目录的所有套接字
find . -type p -print    #只列出当前目录的所有Fifo

基于路径或文件名:
find . -name ap* -o -name may*                #查找以ap或may开头的文件
find . -name "*.txt" -print                   #在当前目录中中查.txt文件并显示
find . -name "[A-Z]*" -print                #在当前目录中查以大写字母开头的文件并显示
find /etc -name "host*" -print               #在/etc目录中查以host开头的文件并显示
find . -name "[a-z][a-z][0–9][0–9].txt" -print        #查以两个小写字母和两个数字开头的txt文件
find . !-name "*.txt" -print                #列出所有不以.txt结尾的文件名
find /home/user -path "*ttt*" -print            #-path将文件路径和文件名当做一个整体来匹配,所以文件路径或者文件名中含有ttt的都会被匹配到
find . -name "*.txt" -print                 #匹配当前目录下所有.txt文件,并输出其路径
find . -iname "example*" -print               #匹配当前目录下以example开头的文件名,不区分大小写,并输出其路径
find . \( -name "*.txt" -o -name "*.pdf" \) -print       #匹配当前目录下所有.txt文件和.pdf文件,并输出其路径
find . -type f -name "*.swp" -delete            #删除当前目录下所有的.swp文件
find . -type f -name "*.c" -exec cat {} \;>all_c_files.txt  #找到所有C文件并拼接起来写入单个文件all_c_files.txt。find命令的输出只是一个单数据流,所以不用>>进行追加
find /mnt -name tom.txt -ftype vfat             #在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find /mnt -name tom.txt ! -ftype vfat           #在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件

基于用户文件权限:
find . -perm 755 -print              #查当前目录下下权限为755的文件
find / -group cat                  #查找在系统中属于cat组的目录和文件
find / -nouser                    #查找在系统中属于作废用户的文件
find / -user fred                   #查找在系统中属于fred这个用户的文件
find . -type f -user ubuntu -print            #列出当前目录下属于用户ubuntu的文件
find . -type f -name "*.php" | -perm 644 -print    #列出当前目录下所有权限为644的php文件
find /home -uid +501                #列出/home目录内用户的识别码大于501的文件或目录
find /home -gid 501                 #列出/home内组id为501的文件或目录
find /home -nouser                  #列出/home内不属于本地用户的文件或目录
find /home -nogroup                  #列出/home内不属于本地组的文件或目录

基于目录或文件大小:
find . -type f -empty            #查找大小为0的文件或空目录
find . -type f -size +1000000c -print    #查长度大于1Mb的文件
find . -type f -size 100c -print      # 查长度为100c的文件
find . -type f -size +10 -print       #查长度超过期作废10块的文件(1块=512字节)
find . -type f -size +2k            #搜索当前目录下大于2KB的文件
find . -type f -size -2k          #搜索当前目录下小于2KB的文件
除了千字节KB(k)之外,还有块(b 512字节),字节(c),字(w),兆字节(M),吉字节(G)

基于操作时间:
find / -type f -amin -10            #查找在系统中最后10分钟访问的文件
find / -type f -atime -2             #查找在系统中最后48小时访问的文件
find / -type f -empty            #查找在系统中为空的文件或者文件夹
find / -type f -mmin -5             #查找在系统中最后5分钟里修改过的文件
find / -type f -mtime -1            #查找在系统中最后24小时里修改过的文件
find /home -type f -mtime -2       #在/home下查最近两天内改动过的文件
find /home -type f -atime -1        #在/home下查1天之内被存取过的文件
find /home -type f -mmin +60       #在/home下查60分钟前改动过的文件
find /home -type f -amin +30       #在/home下查最近30分钟前被存取过的文件
find . -type f -atime -7 -print        #列出当前目录在最近7天内被访问过的所有文件
find .-type f -atime 7 -print        #列出当前目录恰好在第七天前被访问过的所有文件
find . -type f -atime +7 -print        #列出当前目录访问时间超过七天的所有文件
find . -type f -newer file.txt -print        #找出当前目录比file.txt修改时间更长的所有文件,使用-newer,可以指定一个用于比较的时间戳参考文件
find /home -type f -anewer tmp.txt      #在/home下查存取时间比tmp.txt近的文件或目录
find /home -used -2              #列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find ./ -type f -mtime -1 -exec ls -l {} \    #查询当前目录下当天修改过的文件的详细信息
find ./ -type f -mtime -1 -ok ls -l {} \       #查询当前目录下当天修改过的文件的详细信息并询问是否显示
(-atime是根据访问时间;-mtime是根据修改时间;-ctime是根据变化时间。三个参数的单位都是天)
(-amin是根据访问时间;-mmin是根据修改时间;-cmin是根据变化时间。这三个参数的单位是分钟)

find与-exec参数:
find . -perm -007 -exec ls -l {} \;                #查所有用户都可读写执行的文件同-perm 777
find . -type f -user root -exec chown ubuntu {} \;           #将当前目录下所有root的文件改为属于ubuntu,此处{}会替换成每一个匹配的文件名,{}表示匹配,与-exec结合使用
find . -type f -name "*.c" -exec cat {} \;>all_c_files.txt     #找到所有C文件并拼接起来写入单个文件all_c_files.txt。find命令的输出只是一个单数据流,所以不用>>进行追加
find . -type f -atime +10 -name "*.txt" -exec cp {} /data \;     #找到10天前访问的.txt文件并复制到/data目录中
find ./log02* -exec mv {} /data/game \;              #找到当前目录下以log02开头的文件并将其移动到/data/game目录下
find . -type f -mtime +5 -exec -ok rm {} \            #在当前目录中查找更改时间在5日以前的文件并删除它们
find . -type f -name "*.txt" -exec printf "Text file:%s\n" {} \;   #-exec结合printf输出信息
(find 的-exec参数可以接其他任何命令,具体看需求是怎样的)

find 与 xargs 组合:
find . -type f -name "*.txt" -print0 | xargs -0 rm -f        #匹配并删除所有的.txt文件,xargs -0将\0作为输入定界符
find /data -type f -name "*.c" -print0 | xargs -0 wc -l       #统计/data目录下所有C文件的行数
find ./ -name "test*.log" | xargs grep "\[AAAA\]" | wc –l      #通过第一个管道find查找当前目录下所有以test开头的log文件的内容,并将内容输送到第二个管道xargs grep,过滤并查找出所有含有”[AAAA]”的行,然后再送给wc命令进行统计行数
find ./ -name "test*.log" | xargs grep "\[AAAA\]" > re.txt    #同上例,将查找到的行重定向到re.txt文件
find ./ -name "test*.log" | xargs grep "\[AAAA\]" | grep "\"SVR\":1" >re.log                    #同上例,当需要匹配多个字段时:例如此时匹配[AAAA]和 ”SVR”:1 两个字段
find ./ -name "test*.log" | xargs grep "\[AAAA\]" | grep "\"SVR\":1" | grep "\[2016-12-27 10:01:59\]" > re.log   #同上例,多匹配一个[Y-m-d H:i:s]格式的时间字段
(xargs命令应该紧跟在管道操作符后面,以标准输入作为主要的源数据流。)

其他:
find . -iregex ".*\(\.py\|\.sh\)$"               #-iregex忽略正则表达式的大小写 此处为忽略后缀的大小写
find . -maxdepth 2 -type f -print               #遍历的最大深度距离此目录最多为2层子目录,列出所有普通文件
find . -mindepth 2 -type f -print                #遍历的深度距离当前目录至少两个子目录,列出所有文件
find /data \( -name ".git" -prune \) -o \( -type f -print \)      #在/data目录下搜索所有文件,搜索时跳过.git子目录。 \( -name ".git" -prune \)这里用于排除.git目录
find /etc -name "passwd*" -exec grep "cnscn" {} \       #看是否存在cnscn用户
find . -type f -name april* fprint file               #在当前目录下查找以april开始的文件,并把结果输出到file中
find . -links +2                         #查硬连接数大于2的文件或目录

时间: 2024-11-05 18:51:36

linux find 命令用法整理的相关文章

linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理

一:特殊符号用法整理 算术比较-eq 等于-ne 不等于-gt 大于-lt 小于-ge 大于或等于-le 小于或等于-a 逻辑与 and &&-o 逻辑或 or ||[ $var -eq 0 ]    #当$var等于0时,返回真[ $var -ne 0 ]    #当$var为非0时,返回真[ $var1 -ne 0 -a $var2 -gt 2 ][ $var1 -ne 0 -o $var2 -gt 2 ] 字符串比较[[ $str1 = $str2 ]]     #当str1等于st

linux wget 命令用法详解(附实例说明)

Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来

Linux chmod命令用法

chmod----改变一个或多个文件的存取模式(mode) chmod [options] mode files 只能文件属主或特权用户才能使用该功能来改变文件存取模式.mode可以是数字形式或以who opcode permission形式表示.who是可选的,默认是a(所有用户).只能选择一个opcode(操作码).可指定多个mode,以逗号分开. options: -c,--changes 只输出被改变文件的信息 -f,--silent,--quiet 当chmod不能改变文件模式时,不通

Linux常用命令收集整理

有一台 三-丰-云-免-费-主-机,经常都要跟 Linux 打交道,经常要使用到linux的各种命令,当然每次都可以找度娘,但一些基本常的命令还是需要熟练掌握. Linux 网络命令涉及到这么几块: 网络配置: ifconfig. ip 连通性探测: ping. traceroute. telnet. mtr 网络连接: netstat. ss. nc. lsof 流量统计: ifstat. sar. iftop 交换与路由: arp. arping. vconfig. route 防火墙: i

linux学习:归档,备份,进程,网络相关命令用法整理

压缩 tar 归档命令,不具备压缩功能tar -cf output.tar file1 file2 file3 folder1... #参数-c表示创建文件,-f表示指定文件.tar -cf output.tar *.txt   #归档所有.txt文件tar -rvf file.tar new_file.txt  #向归档文件file.tar追加一个文件.tar -tf file.tar #列出归档文件中的内容tar -xf file.tar #参数-x表示提取文件或文件夹.将内容提取到当前文件

linux find命令用法

Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限. 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统). 1.命令格式: find pat

Linux grep命令用法以及正则表达式

1.grep命令和正则表达式的简介 (1).grep(Global search REgular expression and Print out the line),即全局搜索正则表达式并打印出匹配的行,它是Linux系统中一个强大的文本搜索工具,它根据用户指定的"模式(pattern)"对目标文本进行过滤,显示被模式匹配到的行: (2).正则表达式是由一类字符书写的模式,其中有些字符不表示符的字面意义,而是表示控制或通配的功能 2.grep命令的基本语法格式 grep [OPTIO

Linux nc命令用法收集

ps.ubuntu自带的nc是netcat-openbsd版,不带-c/-e参数. pss.在线Markdown编辑器的bug是怎么回事..."#"号依然显示着 ##参数 想要连接到某处: nc [-options] hostname port[s] [ports] - 绑定端口等待连接: nc -l port [-options] [hostname] [port] -g<网关>:设置路由器跃程通信网关,最多设置8个; -G<指向器数目>:设置来源路由指向器,

Linux Linux grep命令用法以及正则表达

一.grep命令和正则表达式的简介 1.grep(Global search REgular expression and Print out the line),即全局搜索正则表达式并打印出匹配的行,它是Linux系统中一个强大的文本搜索工具,它根据用户指定的"模式(pattern)"对目标文本进行过滤,显示被模式匹配到的行: 2.正则表达式是由一类字符书写的模式,其中有些字符不表示符的字面意义,而是表示控制或通配的功能 二.grep命令的基本语法格式 grep [OPTION]..