Linux find命令

时间:2019-11-20 08:53:36  来源:igfitidea点击:

如何在Linux和Unix服务器上搜索文件?
在Linux中,如何查找文件?

find命令用于在Linux或Unix系统上查找文件。它将在您指定的目录中搜索与提供的搜索条件匹配的文件。搜索条件可以按名称,所有者,组,类型,权限,日期,时间,大小写和其他条件搜索文件。
find命令是递归搜索的,即将搜索所有的子目录。

find 命令语法

find {dir-name} -name {file-name} action

或者

find where-to-look criteria action

action是找到文件后进行的操作,默认是打印文件名:

find /dir/ -name "file-to-search" -print

find命令示例

在根目录查找名为foo.txt的文件或者目录:

# find / -name foo.txt

使用-type f指定只查找文件。如果是-type d,则表示值查找目录

# find / -type f -name httpd.log

在/var/www目录中找到httpd.log文件:

# find /var/www/ -type f -name httpd.log

查找时不区分大小写:

# find /var/www/ -type f -iname httpd.log

使用星号表示任意匹配:

# find /var/www/ -type f -iname "*.php" -print

反向查找

使用-not或者 !表示反向查找。即找出匹配默认之外的所有文件。

例如,找出不是c文件的所有文件。

# find /dir/to/search/ -not -name "*.c" -print
# find $HOME -not -iname "*.c" -print

或者

# find /dir/to/search/ \! -name "*.c" print
# find $HOME \! -iname "*.c" print

根据类型查找文件

语法如下:

find /dir/to/search/ -type X -name "file_pattern" -print
find $HOME -type X -iname "file_pattern" -print

其中 " -type X" 指定搜索类型:

  • f:仅搜索普通文件。
  • d:仅搜索目录。
  • l:仅搜索符号链接

在Linux中,根据内容查找文本文件?

使用grep命令,如下所示:

grep 'string' *.txt
grep -R 'string' *.txt

在/etc中搜索所有包含 192.168.1.100字符串的文件

# find /etc/ -iname "*" | xargs grep '192.168.1.100'

在文件上执行命令

在find命令中,可以指定在找到文件之后要进行的操作。

语法为:

find /dir/to/search [options] -name "file_pattern" -exec command-name1 {} \;
find /dir/to/search [options] -iname "file_pattern" -exec command-name1 {} \;
find /dir/to/search type f -iname "file_pattern" -exec command-name1 -arg1 {} \;

例如,将所有的php文件权限改成740:

# find /var/www/ -type f -iname "*.php" -exec chmod 740 {} \;

根据文件所属组和用户进行搜索

搜索属于用户nginx的 文件:

# find / -user nginx -print

搜索属于apache组的文件

# find / -group apache -print