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 . -name "*" -type f -size 0c | xargs -n 1 rm -f #批量删除空文件(大小等于0的文件)的方法
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 d -empty | xargs rmdir #删除当前目录下所有空文件夹
find . -type f -empty | xargs rm -rf #递归查找当前目录及子目录下所有空文件并删除,rm 的 -r参数表示递归,-f表示强制删除
find . -name "*.txt" | xargs rm -rf #查找当前目录下所有.txt文件并删除
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的文件或目录
其他查找的命令:
whereis:用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。例如:whereis php、whereis grep...
which :在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。检查系统命令是否存在,以及执行的到底是哪一个位置的命令。例如:which php、which grep...
locate:是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
locate /etc/sh #搜索etc目录下所有以sh开头的文件。
locate ~/m #搜索用户主目录下,所有以m开头的文件。
locate -i ~/m #搜索用户主目录下,所有以m开头的文件,并且忽略大小写。
linux学习:find用法整理的更多相关文章
- Linux 学习错误点整理之网络配置
本人是一名实习生,最近在学习Linux,在实操的过程中还是遇到了一些问题,所以想记录下来,供自己以后复习,也希望能给跟我一样的菜鸟的人带来一点点帮助. 我用的是VMware Workstation P ...
- vuex - 常用命令学习及用法整理
https://vuex.vuejs.org/zh-cn/api.html 命令 用途 备注 this.$store 组件中访问store实例 store.state.a 获取在state对象中的数据 ...
- linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理
指令:let.expr.array.convert.tput.date.read.md5.ln.apt.系统信息 一:特殊符号用法整理 系统变量 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $ ...
- Linux学习笔记(整理记录)
1.安装 (1):安装网址:http://www.jb51.net/os/78318.html 2.鸟哥的Linux命令学习 (1):显示系统目前所支持的语言:echo $LANG (2):修改语言成 ...
- #define中 #与##的神奇用法linux学习 (转)
#define中 #与##的神奇用法linux学习 (转) #define f(a,b) a##b #define d(a) #a #define s(a) d(a) void main( void ...
- Kali Linux渗透基础知识整理(四):维持访问
Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...
- 怒肝 Linux 学习路线,这回不难
Linux 学习路线 by 鱼皮. 原创不易,请勿抄袭,违者必究! 大家好,我是鱼皮,又花 1 周肝出了 Linux 学习资料全家桶,包括学习路线.命令手册.视频.书籍.文档.实战教程.社区.工具.大 ...
- Linux学习笔记之兄弟连
systemctl --user enable pulseaudio说明:安装完成后系统没有声音,用该命令可以打开.ifconfig eth0 192.168.118.1说明:给网卡设置IP地址.ap ...
- 【资源】C++学习资料 - 逆天整理 - 精华无密版【最新】
再失效就太无语了,链接都是多份的~~—————————————————基础——————————————C++环境搭建(全套)http://pan.baidu.com/s/1o6y0smY链接:http ...
- Kali Linux渗透基础知识整理(二)漏洞扫描
Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...
随机推荐
- docker下安装mysql
docker run -d -p 3306:3306 -v /root/docker/mysql/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf -v /root ...
- [物理学与PDEs]第2章习题11 Lagrange 形式的一维理想流体力学方程组在强间断线上的间断连接条件
对由第 10 题给出的 Lagrange 形式的一维理想流体力学方程组, 给出解在强间断线上应满足的间断连接条件 (假设体积力 $F\equiv 0$). 解答: $$\beex \bea \sez{ ...
- C# 执行oracle sql 语句出现中文不兼容的问题
最近我用C#调用 操作oracle 数据库 出现了一个问题就是 我的查询语中的条件语句 含有中文 字符在C#中查询不了 ,但是在pl sql 中能够正常的查询出来. 这个原因是 C# 执行orccl ...
- linux磁盘空间满?
磁盘空间满啦 找到项目的logs文件夹 进入logs文件夹,会看到很多access.log*文件. 在Xshell里,输入命令cd 到项目节点的logs文件夹 可能还需要清空下回收站.
- django drf 基础学习2
DRF基本程序调用一 models初步编写 1 编写model.py from django.db import models 导入 class dbinfo(models.Model) ...
- C#学习笔记-XML的读写(一)
需要解析的配置XML <?xml version="1.0" encoding="utf-8" ?> <configurations> ...
- pdb调试神器使用终极指南
pdb为python程序实现了一个交互式调试环境.它包括一些特性,可以暂停程序,查看变量值,以及逐步监视程序执行,从而能了解程序具体做了什么,并查找逻辑中存在的bug. 启动调试工具 使用pdb的第一 ...
- Jumpserver(堡垒机)的安装与应用
官网:http://docs.jumpserver.org/zh/docs/introduce.html 作者:邓聪聪 环境 系统: CentOS 7.6 IP: 172.16.16.2 关闭 sel ...
- CKEditor5 + vue2.0 自定义图片上传、highlight、字体等用法
因业务需求,要在 vue2.0 的项目里使用富文本编辑器,经过调研多个编辑器,CKEditor5 支持 vue,遂采用.因 CKEditor5 文档比较少,此处记录下引用和一些基本用法. CKEdit ...
- VS中展开和折叠代码,还有其他快捷操作
[转]VS中展开和折叠代码 VS2005代码编辑器的展开和折叠代码确实很方便和实用.以下是展开代码和折叠代码所用到的快捷键,很常用: Ctrl + M + O: 折叠所有方法 Ctrl + M + ...