1.locate - 查找文件的简单方法
速搜索路径名数据库,并且输出每个与给定字符串相匹配的文件名
$ locate bin/zip
$ locate zip | grep bin
2.find - 查找文件的复杂方式
-cmin n 匹配的文件和目录的内容或属性最后修改时间正好在 n 分钟之前。指定少于 n 分钟之前,使用-n,指定多于 n 分钟之前,使用 +n。
-cnewer file 匹配的文件和目录的内容或属性最后修改时间早于那些文件。
-ctime n 匹配的文件和目录的内容和属性最后修改时间在 n*24 小时之前。
-empty 匹配空文件和目录。
-group name 匹配的文件和目录属于一个组。组可以用组名或组 ID 来表示。
-iname pattern 就像 -name 测试条件,但是不区分大小写。
-inum n 匹配的文件的 inode 号是 n。这对于找到某个特殊 inode 的所有硬链接很有帮助。
-mmin n 匹配的文件或目录的内容被修改于 n 分钟之前。
-mtime n 匹配的文件或目录的内容被修改于 n*24 小时之前。
-name pattern 用指定的通配符模式匹配的文件和目录。
-newer file 匹配的文件和目录的内容早于指定的文件。当编写 shell 脚本,做文件备份时,非常有帮助。每次你制作一个备份,更新文件(比如说日志),然后使用 find 命令来决定自从上次更新,哪一个文件已经更改了。
-nouser 匹配的文件和目录不属于一个有效用户。这可以用来查找属于删除帐户的文件或监测攻击行为。
-nogroup 匹配的文件和目录不属于一个有效的组。
-perm mode 匹配的文件和目录的权限已经设置为指定的 mode。mode可以用八进制或符号表示法。
-samefile name 相似于 -inum 测试条件。匹配和文件 name 享有同样 inode号的文件。
-size n 匹配的文件大小为 n。
-type c 匹配的文件类型是 c。
-user name 匹配的文件或目录属于某个用户。这个用户可以通过用户名或用户 ID 来表示。
例子:
1. -type
b 块设备文件
c 字符设备文件
d 目录
f 普通文件
l 符号链接
2. -size
b 512 个字节块。如果没有指定单位,则这是默认值。
c 字节
w 两个字节的字
k 千字节 (1024 个字节单位)
M 兆字节 (1048576 个字节单位)
G 千兆字节 (1073741824 个字节单位)
$ find ~ -type f -name "\*.JPG" -size +1M | wc -l
3.操作符
-and 如果操作符两边的测试条件都是真,则匹配。可以简写为-a。注意若没有使用操作符,则默认使用 -and。
-or 若操作符两边的任一个测试条件为真,则匹配。可以简写为-o。
-not 若操作符后面的测试条件是真,则匹配。可以简写为一个感叹号(!)。
() 把测试条件和操作符组合起来形成更大的表达式。
$ find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)
4.预定义的操作
delete 删除当前匹配的文件。
-ls 对匹配的文件执行等同的 ls -dils 命令。并将结果发送到标准输出。
-print 把匹配文件的全路径名输送到标准输出。如果没有指定其它操作,这是默认操作。
-quit 一旦找到一个匹配,退出。
find ~ -type f -name '*.BAK' -delete
5.用户定义的行为
-exec 行为
- -exec command {} ;
command 就是指一个命令的名字, {} 是当前路径名的符号表示,分号是要求的界定符表明命令结束
-ok 行为来代替 -exec,在执行每个指定的命令之前,会提示用户
find ~ -type f -name 'foo*' -ok ls -l '{}' ';'
< ls ... /home/me/bin/foo > ? y
-rwxr-xr-x 1 me me 224 2007-10-29 18:44 /home/me/bin/foo
< ls ... /home/me/foo.txt > ? y
-rw-r--r-- 1 me me 0 2008-09-19 12:53 /home/me/foo.txt
-xargs
从标准输入接受输入,并把输入转换为一个特定命令的参数列表
find ~ -type f -name 'foo\*' -print | xargs ls -l
-rwxr-xr-x 1 me me 224 2007-10-29 18:44 /home/me/bin/foo
-rw-r--r-- 1 me me 0 2008-09-19 12:53 /home/me/foo.txt
6.touch – 更新文件时间
$ find playground -type f -name 'file-B' -exec touch '{}' ';'
注:stat,是一款加大马力的 ls 命令版本。这个 stat 命令会展示系统对某个文件及其属性所知道的所有信息