Linux基础教程:find 与 xargs(2)

    类UNIX系统将一切皆视为文件。文件具有不同的类型,例如普通文件、目录、字符设备、块设备、符号链接、套接字以及FIFO等。

    -type 选项可以对文件类型搜索进行过滤。以下是type可指定的类型:

wKiom1UUrI-D7rJeAABUXFrmIGk186.jpg

1

2

3

4

5

 

只列出所有的目录:

$ find . -type d -print

  

只列出普通文件:

$ find . -type f -print

 

基于时间进行搜索

    UNIX/Linux 文件系统中的每一个文件都有三种时间戳(timestamp),如下所示。

访问时间(-atime, access time): 用户最近一次访问文件的时间。

修改时间(-mtime, modify time): 文件内容最后一次被修改的时间。

变化时间(-ctime,  change time): 文件元数据(metadata,例如文件权限或所有权)最后一次改变的时间。

-atime, -mtime, -ctime 可作为 find 的选项, 它们以整数值给出,计量单位是“”。这些整数值通常还带有 - 或 + ; - 表示 小于, + 表示 大于。

1

2

3

4

5

6

7

8

 

打印出在最近 7 天被访问过的所有文件:

$ find . -type f -atime -7 -print

  

打印出恰好在7天前被访问过的所有文件:

$ find . -type f -atime 7 -print

  

打印出超过 7 天被访问过的所有文件:

$ find . -type f -atime +7 -print

 

-atime, -mtime, -ctime 它们计量单位是“”。还有其他一些基于时间的参数是以“分钟”作为计量单位的。它们分别是:

-amin(访问时间)

-mmin(修改时间)

-cmin(变化时间)

基于文件大小搜索

    -size 选项可以根据文件大小过滤,基于文件大小可以这样搜索:

1

2

3

4

5

6

7

8

 

$ find . -type f -size +2k

# 大于 2KB 的文件

  

$ find . -type f -size -2k

# 小于 2KB 的文件

  

$ find . -type f -size 2k

# 等于 2KB 的文件, 需要注意的是:可能会向上进行圆整, -size 7k , 可能会找出 6.8k 的文件

 

除了k之外,还可以用其他文件大小单位:

b    块(512字节)

c    字节

w    字(2字节)

k    千字节

M    兆字节

G    吉字节

基于文件权限和所有权搜索

    find 命令

-perm    -mode

              All  of  the  permission  bits mode are set for the file.  Symbolic modes are

              accepted in this form, and this is usually the way in which would want to use

              them.  You must specify 'u', 'g' or 'o' if you use a symbolic mode.   See the

              EXAMPLES section for some illustrative examples.

-perm    /mode

              Any of the permission bits mode are set for the  file.   Symbolic  modes  are

              accepted  in  this  form.  You must specify 'u', 'g' or 'o' if you use a sym-

              bolic mode.  See the EXAMPLES section for some illustrative examples.  If  no

              permission bits in mode are set, this test matches any file (the idea here is

              to be consistent with the behaviour of -perm -000).

-perm    +mode

              Deprecated, old way of searching for files with any of the permission bits in

              mode  set.   You should use -perm /mode instead. Trying to use the '+' syntax

              with symbolic modes will yield surprising results.  For example, '+u+x' is  a

              valid  symbolic  mode (equivalent to +u,+x, i.e. 0111) and will therefore not

              be evaluated as -perm +mode but instead as the  exact  mode  specifier  -perm

              mode  and  so  it  matches files with exact permissions 0111 instead of files

              with any execute bit set.  If you found this paragraph confusing, you're  not

              alone  -  just  use  -perm  /mode.  This form of the -perm test is deprecated

              because the POSIX specification requires the interpretation of a leading  '+'

              as being part of a symbolic mode, and so we switched to using '/' instead.

 

find -perm参数的详细说明:

-perm

    MODE:  精确匹配,文件权限“刚好等于”MODE, 必须和指定的权限位 一模一样

    -MODE: 文件权限能完全包含此MODE时才符合条件,“必须全部包含”了所有指定的相应权限位即可

    /MODE: 任意一位匹配即满足条件,“任意包含一个指定权限位”的文件都符合。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

 

# ls -l

total 8

-rw-r--r--. 1 root root 77 Mar 27 23:14 a.txt

-------r--. 1 root root  0 Mar 27 23:15 b.txt

-rwxr-xr-x. 1 root root 32 Mar 27 23:14 first.sh

  

MODE: 必须完全精确匹配, 只有权限为 644 的才会找到

# find . -perm 644

./a.txt

  

-MODE: 对应的权限位必须完全包含。rw-r--r-- , 必须包含这几个权限位即可符合条件

# find . -perm -644

.

./a.txt

./first.sh

  

/MODE: 对应的权限位,只要匹配 MODE 任意一位即可。 rw-r--r--

# r--------    匹配

# -w-------    匹配

# ---r-----    匹配

# ------r--    匹配

# rwxr-xr-x    匹配

# find . -perm /644 

.

./a.txt

./first.sh

./b.txt

 

结合find执行命令或动作

    find 命令可以借助选项 -exec 与其他 shell 命令进行结合。相应语法格式为  -exec  command {} \;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/16545.html