1. find1.1 文件名搜索-name# 语法格式: 根据文件名搜索 $ find 搜索的路径 -name 要搜索的文件名路径相对绝对都可以文件名精确查询和模糊查询。关于模糊查询必须要使用对应的通配符最常用的有两个 分别为 * 和 ?。其中 * 可以匹配零个或者多个字符, ?用于匹配单个字符。如果我们进行模糊查询建议非必须将带有通配符的文件名写到引号中单引号或者双引号都可以这样可以避免搜索命令执行失败如果不加引号某些情况下会这样。1.2 文件类型搜索-type# 语法格式: $ find 搜索的路径 -type 文件类型1.3 文件大小搜索-size# 语法格式: $ find 搜索的路径 -size [|-]文件大小 - 文件大小需要加单位: - k (小写) - M (大写) - G (大写)关于文件大小的区间划分非常重要, 请仔细阅读, 并思考, 可以自己画个图, 这里以 4k来举例:-size 4k 表示的区间为 (4-1k4k], 表示一个区间, 大于3k,小于等于4k-size -4k: [0k, 4-1k], 表示一个区间, 大于等于0 并且 小于等于3k-size 4k: (4k, 正无穷), 表示搜索大于4k的文件1.4 目录层级-maxdepth: 最多搜索到第多少层目录 ,-mindepth: 至少从第多少层开始搜索显示出来的至少有三层# 查找文件, 从根目录开始, 最多搜索5层, 这个文件叫做 *.txt (1 层数 5) $ sudo find / -maxdepth 5 -name *.txt # 查找文件, 从根目录开始, 至少从第5层开始搜索, 这个文件叫做 *.txt (层数5层) $ sudo find / -mindepth 5 -name *.txt1.5 同时执行多个操作1 exec# 搜索最多两层目录, 文件名后缀为 .txt的文件 $ find ./ -maxdepth 2 -name *.txt ./luffy/robin.txt ./luffy/onepiece.txt ./onepiece.txt # 搜索到满足条件的文件之后, 再继续查看文件的详细属性信息 $ find ./ -maxdepth 2 -name *.txt -exec ls -l {} \; -rw-r--r-- 1 root root 0 Jan 25 17:54 ./luffy/robin.txt -r--r--r-- 2 root root 37 Jan 25 17:54 ./luffy/onepiece.txt -r--r--r-- 1 root root 37 Jan 26 16:50 ./onepiece.txt2. ok可以交互# 搜索到了2个满足条件的文件 $ find ./ -maxdepth 1 -name *.txt ./aaaaa.txt ./english.txt # 查找并显示文件详细信息 $ find ./ -maxdepth 1 -name *.txt -ok ls -l {} \; ls ... ./aaaaa.txt ? y # 同意显示文件详细信息 -rw-rw-r-- 1 robin robin 10 Apr 17 11:34 ./aaaaa.txt ls ... ./english.txt ? n # 不同意显示文件详细信息, 会跳过显示该条信息 # 什么时候需要交互呢? --- 删除文件的时候 $ find ./ -maxdepth 1 -name *.txt -ok rm -rf {} \; rm ... ./aaaaa.txt ? y # 同意删除 rm ... ./english.txt ? n # 不同意删除 # 删除一个文件之后再次进行相同的搜索 $ find ./ -maxdepth 1 -name *.txt ./english.txt # 只剩下了一个.txt 文件3 xargs# 查找文件 $ find ./ -maxdepth 1 -name *.cpp ./occi.cpp ./main.cpp ./test.cpp # 查找文件, 并且显示文件的详细信息 robinOS:~$ find ./ -maxdepth 1 -name *.cpp | xargs ls -l -rw-r--r-- 1 robin robin 2223 Mar 2 2020 ./main.cpp -rw-r--r-- 1 robin robin 1406 Mar 2 2020 ./occi.cpp -rw-r--r-- 1 robin robin 2015 Mar 1 2020 ./test.cpp # xargs的效率比使用 -exec 效率高 -exec: 将find查询的结果逐条传递给后边的shell命令 -xargs: 将find查询的结果一次性传递给后边的shell命令2. grep查找文件里面符合条件字符串-r: 如果需要搜索目录中的文件内容, 需要进行递归操作, 必须指定该参数-i: 对应要搜索的关键字, 忽略字符大小写的差别-n: 在显示符合样式的那一行之前标示出该行的列数编号# 语法格式: $ grep 搜索的内容 搜索的路径/文件 参数3.locate根据文件名搜索本地的磁盘文件$ locate test # 搜索所有目录下以 test 开头的文件 $ locate /home/robin/test # 指定搜索目录为 /home/robin/, 文件以 test 开头 $ locate TEST -i # 文件名以小写的test为前缀的文件也能被搜索到 $ locate test -n 5 # 搜索文件前缀为 test 的文件, 并且只显示5条信息 # 使用该参数, 需要有正则表达式基础 $ locate -r \.cpp$ # 搜索以 .cpp 结尾的文件正则表达式小科普:在正则表达式中 .可以匹配任意一个 非 \n的单字符上边的命令中使用转译字符\对特殊字符.转译, 就得到了普通的字符.在正则表达式中 $放到字符尾部, 表示字符串必须以这个字符结尾, 上边的命令中修饰的是字符p正则表达式中的 字符c和后边的字符p需要进行字节匹配, 没有特殊含义通过上面的解释就能明白 \.cpp$ 说的就是以 .cpp结尾的字符串