linux(6)

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 命令会展示系统对某个文件及其属性所知道的所有信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章