前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux/Mac简单又强大的基础工具(一)

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

作者头像
FunTester
发布2021-05-07 16:26:31
3550
发布2021-05-07 16:26:31
举报
文章被收录于专栏:FunTesterFunTester

find命令

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

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

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

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

那么接下来,教程开始:

man find

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

使用tree命令查看目录结构

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

代码语言:javascript
复制
$ tree
.
├── demoSub
│   └── testhappy.txt
├── testgood.txt
└── testnice.txt

查找所有文件

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

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

代码语言:javascript
复制
$ find .
.
./testgood.txt
./demoSub
./demoSub/testhappy.txt
./testnice.txt

文件名称直接查找

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

代码语言:javascript
复制
$ find testnice.txt
testnice.txt

按照类型进行查找

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

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

代码语言:javascript
复制
$ find . -type d
.
./demoSub

find . -type f 找所有的文件

代码语言:javascript
复制
$ find . -type f
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt

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

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

代码语言:javascript
复制
$ find . -type f -name "testhappy.txt"
./demoSub/testhappy.txt

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

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

代码语言:javascript
复制
$ find . -type f -name "test*"
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt

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

代码语言:javascript
复制
$ find . -type f -name "*.txt"
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt

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

代码语言:javascript
复制
$ find . -type f -name "test*"
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt

这个时候可以用 -iname 查找

代码语言:javascript
复制
$ find . -type f -iname "test*"
./TESTgood.txt
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt

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

按时间查找

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

10分钟内修改过的文件

代码语言:javascript
复制
$ find . -type f -mmin -10
./TESTgood.txt

10分钟之后修改过的文件

代码语言:javascript
复制
$ find . -type f -mmin +10
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt

或者是某个时间范围内

代码语言:javascript
复制
$ find . -type f -mmin +5 -mmin -10
./TESTgood.txt

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

代码语言:javascript
复制
find . -type f -mtime -2
./TESTgood.txt
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt

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

cmin,ctime 最后变更的时间

按照文件大小进行查找

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

代码语言:javascript
复制
$ ls -lah
total 2.5M
drwxrwxr-x 3 qin  qin  4.0K Apr 19 21:59 .
drwxrwxrwx 5 root root 4.0K Apr 19 21:26 ..
drwxrwxr-x 2 qin  qin  4.0K Apr 19 21:26 demoSub
-rw-rw-r-- 1 qin  qin     0 Apr 19 21:26 testgood.txt
-rw-rw-r-- 1 qin  qin     0 Apr 19 21:45 TESTgood.txt
-rw-r--r-- 1 root root 2.5M Apr 19 21:59 testlalala.zip
-rw-rw-r-- 1 qin  qin     0 Apr 19 21:26 testnice.txt

接着使用 -size进行查找

代码语言:javascript
复制
$ find . -size +2M
./testlalala.zip

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

查找空的文件

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

代码语言:javascript
复制
$ find . -empty
./TESTgood.txt
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt

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

按照权限进行查找

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

代码语言:javascript
复制
$find . -perm 664
./TESTgood.txt
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt

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

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

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

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

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

代码语言:javascript
复制
find . -perm 664 -exec chmod 777 {} +

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

修改文件的owner和group:

代码语言:javascript
复制
find . -exec chown qin:tester {}  +

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

代码语言:javascript
复制
find . -type d -exec chmod 775 {} +

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

代码语言:javascript
复制
find . -type f -exec chmod 664 {} +

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

代码语言:javascript
复制
find . -type f -name "*.txt" -exec rm {} +

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

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

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

栗子:

代码语言:javascript
复制
find . -maxdepth 1 -name "*.txt" -exec rm {} +

执行结束后:

代码语言:javascript
复制
$ tree
.
├── demoSub
│   └── testhappy.txt
└── testlalala.zip

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

小结

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

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

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


FunTester,腾讯云年度作者Boss直聘签约作者GDevOps官方合作媒体,非著名测试开发。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • find命令
    • man find
      • 使用tree命令查看目录结构
        • 查找所有文件
          • 文件名称直接查找
            • 按照类型进行查找
              • 按时间查找
                • 按照文件大小进行查找
                  • 查找空的文件
                    • 按照权限进行查找
                      • 对查找的文件\目录进行操作
                        • 小结
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档