Linux/Mac中的基础命令其实有着非常强大的功能,本次我会将个人常用到的一些命令进行整理,希望可以帮助到各位。
那么第一篇,我们就来讲一下linux系统中的基础命令find。
find命令是在Linux系统中一个非常强大的工具,它可以根据用户给到的参数进行文件和目录的搜索并返回,用户也可以根据文件或目录的权限,类型,时间,拥有者以及大小等不同维度进行搜索。
本文由FunTester学习社区小伙伴输出,后续还会有各路学习笔记分享,欢迎大家关注支持。
那么接下来,教程开始:
使用工具前可以先瞧一瞧说明书~首先使用man命令就可以查看到find相关的各种参数命令
使用tree命令查看当前文件夹树状目录结构
$ tree
.
├── demoSub
│ └── testhappy.txt
├── testgood.txt
└── testnice.txt
find主要是拿来查找文件,那么第一个命令就是"find ."
find 后如果第一个参数为查找的位置,则在指定的目录下进行查找。“.”就相当于当前目录下所有文件
$ find .
.
./testgood.txt
./demoSub
./demoSub/testhappy.txt
./testnice.txt
如果第一参数输入为文件名,则会直接搜索当前目录下是否存在该文件
$ find testnice.txt
testnice.txt
-type命令用于区分查找文件夹或者文件,如果使用-type d则只返回文件夹目录,-type f 意味着只返回文件查找的结果。
find . -type d 找所有的文件夹
$ find . -type d
.
./demoSub
find . -type f 找所有的文件
$ find . -type f
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt
在命令后加入-name参数,可指定查到的文件
如find . -type f -name "testhappy.txt" 找到名为testhappy.txt的文件并返回
$ find . -type f -name "testhappy.txt"
./demoSub/testhappy.txt
如果在名字中加入*,则为任意字符匹配,如“test*”为查找test开头的所有文件
find . -type f -name "test*" 找到开头为test的文件
$ find . -type f -name "test*"
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt
如果将*放在字符前面,则任意前缀,如“*.txt”为查找所有txt格式的文件,这个命令非常方便查找不同格式的文件哦
$ find . -type f -name "*.txt"
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt
需要注意的是 -name 是对大小写敏感的,如果名称为“test*”则无法找到Test开头的文件 如新建一个TESTgood.txt在当前目录并进行查找:
$ find . -type f -name "test*"
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt
这个时候可以用 -iname 查找
$ find . -type f -iname "test*"
./TESTgood.txt
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt
这样子就大小写都可以找到啦~
除了可以对名称进行查找,find也可以对文件的相关时间参数进行查找,比如使用 -mmin(按照最后修改的时间) 参数:
10分钟内修改过的文件
$ find . -type f -mmin -10
./TESTgood.txt
10分钟之后修改过的文件
$ find . -type f -mmin +10
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt
或者是某个时间范围内
$ find . -type f -mmin +5 -mmin -10
./TESTgood.txt
如果-mmin分钟的嫌时间单位太小,也可以使用 -mtime(天) 如搜索2天以内修改过的文件:
find . -type f -mtime -2
./TESTgood.txt
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt
另外作用相同的还有amin,atime 最后访问的时间
cmin,ctime 最后变更的时间
时间说完了,那么find命令也是可以按照文件的大小进行查找的咧。只需要加入-size参数并在后面标明大小和单位即可实现,下面例子中先传入一个大小2.5MB的文件"testlalala.zip"
$ 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进行查找
$ find . -size +2M
./testlalala.zip
如果后面参数为-2M,则显示剩下的所有小于2MB的文件咯。不同的大小单位还包括 K for KB 和 G for GB,用于查找不同文件大小维度时使用。
值得一提的是,find还支持使用 -empty 查找内容为空的文件
$ find . -empty
./TESTgood.txt
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt
刚刚目录里的文件都是刚创建的,所以这里文件里都是什么都没有~
除了时间和大小查找,find也支持对文件权限进行查找,只要使用 -perm就可以啦。
$find . -perm 664
./TESTgood.txt
./testgood.txt
./demoSub/testhappy.txt
./testnice.txt
在 -perm 权限大小,则可以根据权限进行查找返回目录或文件。
如果你觉得返回权限这个功能用处不大,那么接下来的命令则可以将该命令最大利用起来~那就是 -exec
之前的find都只是对文件或目录进行查找,但是find其实还有一个很cool的功能就是对文件进行修改操作。
-exec 可以对find中返回的结果进行操作,具体为在-exec后面加入需要执行的操作,如
find . -perm 664 -exec chmod 777 {} +
该命令可将所有查找到的664权限文件或目录全部修改为777权限,其中命令中的{}代表find中搜索到的结果,使用“+”或者“.”标记结束,这个可以根据跟人习惯选择~个人来说觉得“+”更方便一些,另外也有一些延伸的命令如:
修改文件的owner和group:
find . -exec chown qin:tester {} +
修改所有的目录至775权限:
find . -type d -exec chmod 775 {} +
修改所有的目录至664权限:
find . -type f -exec chmod 664 {} +
另外也可以使用该命令删除所有以.txt结尾的文件
find . -type f -name "*.txt" -exec rm {} +
说到删除,这里 强烈建议在每次使用该命令删除文件之前先使用“-exec”前面的find命令先执行一次,确保要被删除的文件是正确的。
如果目录下还有很多子目录,但是又只想删除当前第一层目录下的文件时应该怎么做呢?
很简单~使用 -maxdepth 命令限制find只对设置的目录深度进行查找,如深度为1,那自然就是当前目录了~
栗子:
find . -maxdepth 1 -name "*.txt" -exec rm {} +
执行结束后:
$ tree
.
├── demoSub
│ └── testhappy.txt
└── testlalala.zip
父目录中的所有txt都被删除啦~但是子目录中的txt文件还是活着的。
通过linux中自带的基本命令,也可以简单的完成一些较为复杂的操作,实现一个事半功倍的效果。
当然,这也是linux有趣的地方,毕竟纯命令行在大多数人的眼里意味着不方便和乏味,了解技巧以后也会增加对命令行操作的乐趣。
以上就是本人对于find命令的一些总结,后续就看需求更新啦。