一切皆可查的 find
find
命令用来在指定目录下查找文件,功能相当之强大。
官方定义为:
find - search for files in a directory hierarchy
Linux的哲学是一切皆文件,那么find的使命就是一切皆可查。
语法
使用语法为:
1 | $ find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] |
比较常用的几个参数为:
-exec <执行指令>
:假设find指令的回传值为True,就执行该指令;-size <文件大小>
:查找符合指定的文件大小的文件;-mtime <24小时>
:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;-type <文件类型>
:只寻找符合指定的文件类型的文件;
无参数
如果使用该命令时,不设置任何参数,则find
命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
1 | $ ls -l |
查找小于,等于和大于100MB的文件
通过-size大小来查找文件
1 | $ find . -size -100M |
查找多长时间修改过
可以通过参数-mtime来查找文件的修改时间,比如如下可以查找当前目录下最近60天没有被修改的文件。
1 | $ find . -mtime +60 |
如何删除扩展名为.tar.gz并且大于100M的压缩文件?
当你不想意外删除文件时,那么当执行下列命令要小心点。最好的方法是利用ls -l
去执行下列相同命令以确保当执行rm
命令时,你知道什么文件会被删除。
1 | $ find / -type f -name *.tar.gz -size +100M -exec ls -l {} \; |
稍微复杂但是很有用的命令
我经常把 find
命令和他的选项 exec
一起使用,比如我想查找一个目录中的所有文件并将其更改其权限。可以通过以下简单命令完成:
$ find /path/ -type f -exec chmod 644 {} \;
这个命令会递归搜索指定目录内/path/下的所有文件,并对找到的文件执行 chmod
命令。