目录
在 Linux 系统中,find
命令用于在指定目录中查找文件和目录。
它的基本语法如下:
find [path] [expression]
其中,path
表示要查找的目录路径;expression
表示要匹配的表达式,可以用来指定要查找的文件名、类型、大小等条件
以下是find命令的一些 expression
参数:
-name 文件名 | 以文件名查找 |
-atime +n | 查找访问时间在n天以前的文件 |
-atime -n | 查找访问时间在n天以内的文件 |
-perm nnn | 查找具有特定文件权限的文件 |
-type x | 查找文件类型为x的文件 |
-size n | 查找指定文件大小的文件 |
-links n | 查找链接数量为n的文件 |
-user 用户名 | 查找指定用户的所有文件 |
用来打印找到的文件路径 | |
-ls | 用来显示找到的文件的详细信息 |
-exec cmd {}; | 用来在找到的文件上执行指定命令 |
atime +n
它
是在 find
命令中用来查找访问时间(access time)在 n 天前的文件。
这个参数后面的 "n" 代表天数,加号表示查找访问时间在 n 天之前的文件,不带加号则表示查找访问时间正好是 n 天前的文件。
例如,
find /path/to/search -type f -atime +7
将会在 /path/to/search
目录及其子目录中查找访问时间在 7 天前的所有文件。
atime
参数代表的是访问时间,也就是文件最后一次被读取的时间,而不是修改时间或创建时间。
同时,使用 atime
参数可能会导致性能问题,因为每次查找都需要读取文件元数据并比较访问时间。建议在使用时谨慎考虑。
-atime -n:
是在 find
命令中用来查找最后访问时间在指定时间之前的文件的选项。这里的 "-n" 是一个数字,表示指定的时间。负数表示在 n 天之前,正数表示在 n 天之内。
举个栗子:
find /path/to/search -type f -atime -7
上述命令将会在 /path/to/search
目录及其子目录中查找最后访问时间在过去 7 天内的文件。
需要注意的是,-atime
选项用于查找最后访问时间,单位为天。可以使用负数或正数来限定时间范围。
-perm nnn:
是在 find
命令中用来查找具有特定权限的文件的参数。这里的 "nnn" 代表文件权限的数字表示形式,通常是三个八进制数字,分别表示文件所有者、文件所属组和其他用户的权限。
举个栗子,如果要查找具有特定权限的文件,可以使用类似如下的命令:
find /path/to/search -type f -perm 644
这条命令将会在 /path/to/search
目录及其子目录中查找具有 -rw-r--r--
权限(即644权限)的所有文件。
-type x
;
是在 find
命令中用来根据文件类型进行筛选的选项。这里的 "x" 可以是以下几种类型之一:
f
:普通文件d
:目录l
:符号链接c
:字符设备文件b
:块设备文件s
:套接字文件p
:命名管道(FIFO)
举个栗子:
find /path/to/search -type d
上述命令将会在 /path/to/search
目录及其子目录中查找所有的目录。
-type
选项用于指定要查找的文件类型,可以根据具体需求选择不同的类型。
-size n
:
是在 find
命令中用来查找指定文件大小的参数。这里的 "n" 代表文件大小,可以使用正数、负数或者零来指定。
以下是一些常见的 -size
参数的用法:
-size +n
:查找大于 n 字节的文件。-size -n
:查找小于 n 字节的文件。-size n
:查找正好是 n 字节的文件。
举个栗子,如果要查找所有大于 1MB 的文件,可以使用如下命令:
find /path/to/search -type f -size +1M
这条命令将会在 /path/to/search
目录及其子目录中查找所有大于 1MB 的文件。
需要注意的是,-size
参数默认单位是512字节块(block)。你可以使用其他单位来指定文件大小,例如 k
表示KB,M
表示MB,G
表示GB。例如,-size +100k
表示查找大于 100KB 的文件。
同时,-size
参数也可以与逻辑运算符 -and
、-or
以及 -not
结合使用,以实现更复杂的条件组合。
-links n:
是在 find
命令中用来查找指定硬链接数的文件的选项。这里的 "n" 是一个数字,表示文件的硬链接数。
举个栗子:
find /path/to/search -type f -links 2
上述命令将会在 /path/to/search
目录及其子目录中查找硬链接数为 2 的所有普通文件。
需要注意的是,-links
选项用于查找硬链接数等于指定数字的文件。硬链接是指多个文件名指向同一个文件实体,因此硬链接数代表了相同实体的不同名称个数。
-user 用户名
:
是在 find
命令中用来查找指定用户所有文件的参数。这里的 "用户名" 是指系统中存在的有效用户名。
举个栗子:
find /path/to/search -type f -user username
上述命令将会在 /path/to/search
目录及其子目录中查找属于 "username" 用户的所有文件。
需要注意的是,-user
参数只能匹配文件的所有者。如果你想要查找其他用户权限下的文件,可能需要使用其他方法,例如使用 sudo
权限或切换用户来执行命令。
同时,-user
参数也可以与逻辑运算符 -and
、-or
以及 -not
结合使用,以实现更复杂的条件组合。
-print:
是在 find
命令中用来打印找到的文件路径的选项。它会将匹配的文件路径输出到标准输出(通常是终端)。
以下是一个示例命令:
find /path/to/search -type f -name "*.txt" -print
上述命令将会在 /path/to/search
目录及其子目录中查找所有扩展名为 .txt
的文件,并将它们的路径打印到标准输出。
-print
是 find
命令的默认行为,如果没有指定其他的动作或选项,find
命令会自动执行 -print
操作。
-ls;
是在 find
命令中用来显示找到的文件的详细信息的选项。它会打印出文件的权限、所有者、大小、修改时间等属性信息。
举个栗子:
find /path/to/search -type f -name "*.txt" -ls
上述命令将会在 /path/to/search
目录及其子目录中查找所有扩展名为 .txt
的文件,并显示这些文件的详细信息。
与 -exec
不同,-ls
选项会自动打印文件信息,并不需要指定其他命令。
-exec cmd {} \;
是在 find
命令中用来在找到的文件上执行指定命令的选项。这里的 "cmd" 是要执行的命令,"{}" 是一个占位符,代表找到的文件路径。
举个栗子:
find /path/to/search -type f -name "*.txt" -exec ls -l {} \;
上述命令将会在 /path/to/search
目录及其子目录中查找所有扩展名为 .txt
的文件,并对每个文件执行 ls -l
命令,显示文件的详细信息。
在使用 -exec
选项时,{}
必须以 \;
结尾,用来表示 -exec
命令的结束。\;
是为了与 shell 的语法相匹配,以避免解析错误。
结语:
需要注意的是,find
命令对于大型目录或繁琐的表达式可能需要一段时间才能完成。另外,为了避免误删文件,建议在使用 -delete
等删除操作时先使用 ls
命令预览匹配到的文件列表
其他文章:
Linux------mv命令超详解(狠狠爱住)-CSDN博客
Linux-------rm命令超详解(狠狠爱住)-CSDN博客
Linux-----touch命令超详解(狠狠爱住)-CSDN博客