如何使用命令行在Linux中查找文件
“ find”命令是Linux系统管理员中最强大的工具之一。
它根据用户给定的表达式在目录层次结构中搜索文件和目录,并且可以对每个匹配的文件执行用户指定的操作。
我们可以使用“查找”命令根据其权限,类型,日期,所有权,大小等来搜索文件和目录。
它也可以与其他工具(例如'grep'或者'sed')结合使用。
Linux“find”命令语法
'find'命令的一般语法如下:
find [options] [path...] [expression]
- “选项”属性控制符号链接,调试选项和优化方法的处理。
- “ path ...”属性定义find会其中搜索文件的一个或者多个起始目录。
- “表达式”属性由选项,搜索模式和由运算符分隔的动作组成。
要在目录中搜索文件,调用“ find”命令的用户需要对该目录具有读取权限。
让我们看一下以下示例:
find -L /var/www -name "*.js"
- 选项“ -L”(选项)告诉“查找”命令遵循符号链接。
- “/var/www”(路径…)指定要搜索的目录。
- (表达式)“-name” *。js”告诉“ find”搜索以“ .js”结尾的文件(JavaScript文件)。
按名称查找文件
通过名称查找文件可能是'find'命令的最常见用法。
要按文件名查找文件,请在要搜索的文件名后使用“ -name”选项。
例如,要在“/home/theitroad”目录中搜索名为“ document.pdf”的文件,可以使用以下命令:
find /home/theitroad -type f -name document.pdf
要运行不区分大小写的搜索,请将'-name'选项更改为'-iname':
find /home/theitroad -type f -iname document.pdf
上面的命令将匹配“ Document.pdf”,“ DOCUMENT.pdf” .. etc。
按扩展名查找文件
按扩展名搜索文件与按名称搜索文件相同。
例如,要在“/var/log/nginx”目录中查找所有以“ .log.gz”结尾的文件,可以使用:
find /var/log/nginx -type f -name '*.log.gz'
重要的是要提到,当我们使用通配符时,必须加引号或者用反斜杠“ \”转义星号“ *”,以免被shell解释。
要查找与正则表达式“ * .log.gz”不匹配的所有文件,可以使用“ -not”选项。
例如,要查找所有不以“ * .log.gz”结尾的文件,请使用:
find /var/log/nginx -type f -not -name '*.log.gz'
按类型查找文件
有时我们可能需要搜索特定的文件类型,例如普通文件,目录或者符号链接。
在Linux中,所有内容都是文件。
要基于文件的类型搜索文件,请使用“ -type”选项,然后使用以下描述符之一指定文件类型:
- 'f':常规文件
- 'd':目录
- 'l':符号链接
- 'c':字符设备
- 'b':块设备
- 'p':命名管道(FIFO)
- 's':套接字
例如,要查找当前工作目录中的所有目录,可以使用:
find . -type d
常见示例是使用“ chmod”命令将文件权限递归更改为“ 644”,目录权限更改为“ 755”:
find /var/www/my_website -type d -exec chmod 0755 {} \;find /var/www/my_website -type f -exec chmod 0644 {} \;
按大小查找文件
要根据文件大小查找文件,请传递“ -size”参数以及大小标准。
我们可以使用以下后缀指定文件大小:
- 'b':512字节块(默认)
- 'c':字节
- 'w':两字节字
- 'k':千字节
- 'M':兆字节
- 'G':千兆字节
以下命令将在“/tmp”目录中找到所有精确为“ 1024”字节的文件:
find /tmp -type f -size 1024c
“查找”命令还允许我们搜索大于或者小于指定大小的文件。
在以下示例中,我们正在当前工作目录中搜索所有小于“ 1MB”的文件。
注意大小值之前的减号“-”:
find . -type f -size -1M
如果要搜索大小大于'1MB'的文件,则需要使用加号'+':
find . -type f -size +1M
我们甚至可以搜索大小范围内的文件。
以下命令将查找介于“ 1”和“ 2MB”之间的所有文件:
find . -type f -size +1M -size 21M
按修改日期查找文件
“查找”命令还可以根据文件的最后修改,访问或者更改时间来搜索文件。
与按大小搜索时相同,将加号和减号用于“大于”或者“小于”。
假设几天前,我们修改了一个鸽舍配置文件,但我们忘记了其中一个。
我们可以轻松过滤“ /etc/dovecot/conf.d”目录下以“ .conf”结尾并且在最近五天内已被修改的所有文件:
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
这是另一个使用'-daystart'选项根据修改日期过滤文件的示例。
下面的命令将列出'/home'目录中所有在'30'或者更多天前被修改的文件:
find /home -mtime +30 -daystart
按权限查找文件
“ -perm”选项使我们可以基于文件许可权搜索文件。
例如,要在“/var/www/html”目录中查找所有权限完全为“ 775”的文件,可以使用:
find /var/www/html -perm 644
我们可以在数字模式前加上减号'-'或者斜线'/'。
当将斜杠“ /”用作前缀时,则至少一个类别(用户,组或者其他类别)必须至少设置相应的位以使文件匹配。
考虑以下示例命令:
find . -perm /444
上面的命令将匹配所有为用户,组或者其他用户设置了读取权限的文件。
如果将减号“-”用作前缀,则必须设置文件至少要匹配指定的位。
以下命令将搜索对所有者和组具有读写权限并且可由其他用户读取的文件:
find . -perm -664
按所有者查找文件
要查找特定用户或者组拥有的文件,请使用“ -user”和“ -group”选项。
例如,要搜索用户'theitroad'拥有的所有文件和目录,可以运行:
find/-user theitroad
这是一个真实的例子。
假设我们要查找用户“ www-data”拥有的所有文件,并将匹配文件的所有权从“ www-data”更改为“ nginx”:
find/-user www-data -type f -exec chown nginx {} \;
查找和删除文件
要删除所有匹配文件,请将'-delete'选项添加到匹配表达式的末尾。
确保仅在确信结果与要删除的文件匹配时,才使用此选项。
在使用“ -delete”选项之前,先打印匹配的文件是一个好主意。
例如,要从“/var/log /”中删除所有以“ .temp”结尾的文件,我们可以使用:
find /var/log/-name `*.temp` -delete
使用“ -delete”选项时要格外小心。
find命令行被评估为表达式,如果我们首先添加'-delete'选项,该命令将删除我们指定的起点以下的所有内容。
对于目录,'find'只能删除与'rmdir'相同的空目录。