ITPub博客

首页 > 数据库 > 数据库开发技术 > Linux/Mac简单又强大的基础工具(一)

Linux/Mac简单又强大的基础工具(一)

原创 数据库开发技术 作者:FunTester 时间:2021-04-21 09:01:36 0 删除 编辑

find命令

Linux/Mac中的基础命令其实有着非常强大的功能,本次我会将个人常用到的一些命令进行整理,希望可以帮助到各位。

那么第一篇,我们就来讲一下linux系统中的基础命令find。

find命令是在Linux系统中一个非常强大的工具,它可以根据用户给到的参数进行文件和目录的搜索并返回,用户也可以根据文件或目录的权限,类型,时间,拥有者以及大小等不同维度进行搜索。

本文由FunTester学习社区小伙伴输出,后续还会有各路学习笔记分享,欢迎大家关注支持。

那么接下来,教程开始:

man find

使用工具前可以先瞧一瞧说明书~首先使用man命令就可以查看到find相关的各种参数命令 

使用tree命令查看目录结构

使用tree命令查看当前文件夹树状目录结构

  1. $ tree

  2. .

  3. ├── demoSub

  4. │   └── testhappy.txt

  5. ├── testgood.txt

  6. └── testnice.txt

查找所有文件

find主要是拿来查找文件,那么第一个命令就是"find ."

find 后如果第一个参数为查找的位置,则在指定的目录下进行查找。“.”就相当于当前目录下所有文件

  1. $ find .

  2. .

  3. ./testgood.txt

  4. ./demoSub

  5. ./demoSub/testhappy.txt

  6. ./testnice.txt

文件名称直接查找

如果第一参数输入为文件名,则会直接搜索当前目录下是否存在该文件

  1. $ find testnice.txt

  2. testnice.txt

按照类型进行查找

-type命令用于区分查找文件夹或者文件,如果使用-type d则只返回文件夹目录,-type f 意味着只返回文件查找的结果。

find . -type d 找所有的文件夹

  1. $ find . -type d

  2. .

  3. ./demoSub

find . -type f 找所有的文件

  1. $ find . -type f

  2. ./testgood.txt

  3. ./demoSub/testhappy.txt

  4. ./testnice.txt

在命令后加入-name参数,可指定查到的文件

如find . -type f -name "testhappy.txt"   找到名为testhappy.txt的文件并返回

  1. $ find . -type f -name "testhappy.txt"

  2. ./demoSub/testhappy.txt

如果在名字中加入*,则为任意字符匹配,如“test*”为查找test开头的所有文件

find . -type f -name "test*" 找到开头为test的文件

  1. $ find . -type f -name "test*"

  2. ./testgood.txt

  3. ./demoSub/testhappy.txt

  4. ./testnice.txt

如果将*放在字符前面,则任意前缀,如“*.txt”为查找所有txt格式的文件,这个命令非常方便查找不同格式的文件哦

  1. $ find . -type f -name "*.txt"

  2. ./testgood.txt

  3. ./demoSub/testhappy.txt

  4. ./testnice.txt

需要注意的是 -name 是对大小写敏感的,如果名称为“test*”则无法找到Test开头的文件 如新建一个TESTgood.txt在当前目录并进行查找:

  1. $ find . -type f -name "test*"

  2. ./testgood.txt

  3. ./demoSub/testhappy.txt

  4. ./testnice.txt

这个时候可以用 -iname 查找

  1. $ find . -type f -iname "test*"

  2. ./TESTgood.txt

  3. ./testgood.txt

  4. ./demoSub/testhappy.txt

  5. ./testnice.txt

这样子就大小写都可以找到啦~

按时间查找

除了可以对名称进行查找,find也可以对文件的相关时间参数进行查找,比如使用 -mmin(按照最后修改的时间) 参数:

10分钟内修改过的文件

  1. $ find . -type f -mmin -10

  2. ./TESTgood.txt

10分钟之后修改过的文件

  1. $ find . -type f -mmin +10

  2. ./testgood.txt

  3. ./demoSub/testhappy.txt

  4. ./testnice.txt

或者是某个时间范围内

  1. $ find . -type f -mmin +5 -mmin -10

  2. ./TESTgood.txt

如果-mmin分钟的嫌时间单位太小,也可以使用 -mtime(天) 如搜索2天以内修改过的文件:

  1. find . -type f -mtime -2

  2. ./TESTgood.txt

  3. ./testgood.txt

  4. ./demoSub/testhappy.txt

  5. ./testnice.txt

另外作用相同的还有amin,atime  最后访问的时间

cmin,ctime 最后变更的时间

按照文件大小进行查找

时间说完了,那么find命令也是可以按照文件的大小进行查找的咧。只需要加入-size参数并在后面标明大小和单位即可实现,下面例子中先传入一个大小2.5MB的文件"testlalala.zip"

  1. $ ls -lah

  2. total 2.5M

  3. drwxrwxr-x 3 qin  qin  4.0K Apr 19 21:59 .

  4. drwxrwxrwx 5 root root 4.0K Apr 19 21:26 ..

  5. drwxrwxr-x 2 qin  qin  4.0K Apr 19 21:26 demoSub

  6. -rw-rw-r-- 1 qin  qin     0 Apr 19 21:26 testgood.txt

  7. -rw-rw-r-- 1 qin  qin     0 Apr 19 21:45 TESTgood.txt

  8. -rw-r--r-- 1 root root 2.5M Apr 19 21:59 testlalala.zip

  9. -rw-rw-r-- 1 qin  qin     0 Apr 19 21:26 testnice.txt

接着使用 -size进行查找

  1. $ find . -size +2M

  2. ./testlalala.zip

如果后面参数为-2M,则显示剩下的所有小于2MB的文件咯。不同的大小单位还包括 K for KB 和 G for GB,用于查找不同文件大小维度时使用。

查找空的文件

值得一提的是,find还支持使用 -empty 查找内容为空的文件

  1. $ find . -empty

  2. ./TESTgood.txt

  3. ./testgood.txt

  4. ./demoSub/testhappy.txt

  5. ./testnice.txt

刚刚目录里的文件都是刚创建的,所以这里文件里都是什么都没有~

按照权限进行查找

除了时间和大小查找,find也支持对文件权限进行查找,只要使用 -perm就可以啦。

  1. $find . -perm 664

  2. ./TESTgood.txt

  3. ./testgood.txt

  4. ./demoSub/testhappy.txt

  5. ./testnice.txt

在 -perm 权限大小,则可以根据权限进行查找返回目录或文件。

如果你觉得返回权限这个功能用处不大,那么接下来的命令则可以将该命令最大利用起来~那就是 -exec

对查找的文件\目录进行操作

之前的find都只是对文件或目录进行查找,但是find其实还有一个很cool的功能就是对文件进行修改操作。

-exec 可以对find中返回的结果进行操作,具体为在-exec后面加入需要执行的操作,如

  1. find . -perm 664 -exec chmod 777 {} +

该命令可将所有查找到的664权限文件或目录全部修改为777权限,其中命令中的{}代表find中搜索到的结果,使用“+”或者“.”标记结束,这个可以根据跟人习惯选择~个人来说觉得“+”更方便一些,另外也有一些延伸的命令如:

修改文件的owner和group:

  1. find . -exec chown qin:tester {}  +

修改所有的目录至775权限:

  1. find . -type d -exec chmod 775 {} +

修改所有的目录至664权限:

  1. find . -type f -exec chmod 664 {} +

另外也可以使用该命令删除所有以.txt结尾的文件

  1. find . -type f -name "*.txt" -exec rm {} +

说到删除,这里 强烈建议在每次使用该命令删除文件之前先使用“-exec”前面的find命令先执行一次,确保要被删除的文件是正确的。

如果目录下还有很多子目录,但是又只想删除当前第一层目录下的文件时应该怎么做呢?

很简单~使用 -maxdepth 命令限制find只对设置的目录深度进行查找,如深度为1,那自然就是当前目录了~

栗子:

  1. find . -maxdepth 1 -name "*.txt" -exec rm {} +

执行结束后:

  1. $ tree

  2. .

  3. ├── demoSub

  4. │   └── testhappy.txt

  5. └── testlalala.zip

父目录中的所有txt都被删除啦~但是子目录中的txt文件还是活着的。

小结

通过linux中自带的基本命令,也可以简单的完成一些较为复杂的操作,实现一个事半功倍的效果。

当然,这也是linux有趣的地方,毕竟纯命令行在大多数人的眼里意味着不方便和乏味,了解技巧以后也会增加对命令行操作的乐趣。

以上就是本人对于find命令的一些总结,后续就看需求更新啦。


FunTester,腾讯云年度作者、Boss直聘签约作者,GDevOps官方合作媒体,非著名测试开发。

点击阅读原文,查看公众号历史文章

原文作者:FunTester;如有侵权,请联系管理员删除。

下一篇: 学习笔记杂谈
请登录后发表评论 登录
全部评论

注册时间:2019-07-07

  • 博文量
    1037
  • 访问量
    420888