如何在Linux和Unix服务器上搜索文件?

时间:2020-01-09 14:16:44  来源:igfitidea点击:

如何在Linux机器上搜索文件?
如何使用bash命令行在基于Linux的系统上找到文件?
解决方法:您需要使用find命令或locate命令在Linux或类似Unix的服务器上搜索文件。

find命令

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

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

或者

find where-to-look criteria action

默认操作是打印文件名:

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

查找命令示例

要在整个服务器中查找名为foo.txt的文件,请执行:

# find / -name foo.txt

找出httpd.log文件:

# find / -type f -name httpd.log

要在/home/web-server /目录中找到httpd.log文件,请执行:

# find /home/web-server/ -type f -name httpd.log

要在/home/web-server /目录中查找不带大小写的httpd.log文件,即不区分大小写,例如httpd.log,HTTPD.LOG,HTTpd.LOG,请执行:

# find /home/web-server/ -type f -iname httpd.log

要查找/var/www /目录中的所有php文件(* .php),请执行:

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

在名为~/projects /?的目录中查找* .c以外的所有文件。

要查找除特定模式以外的所有文件,即以--not或反转搜索。

# 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:仅搜索符号链接

要在/var/www /中搜索所有* .pl(perl)文件,请输入以下内容:

find /var/www/ -type f -name "*.pl" -print
## OR case insensitive search ### 
find /var/www/ -type f -iname "*.pl" -print

如何在基于Linux或UNIX的服务器上按内容查找文件?

使用grep命令,如下所示:

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

在/etc /目录中搜索所有文件,仅显示IP地址为192.168.1.5的文件:

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

有关更多信息,请参见如何在UNIX和Linux下按内容查找文件。

在文件上执行命令

您可以在使用find命令定位的文件上运行任何命令(例如rm或cp)。
语法为:

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 {} \;

在此示例中,使用chmod命令将所有* .php文件设置为0644的权限:

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

按所有者或组查找文件

要查找www用户拥有的所有文件,请执行:

# find / -user www -print

要查找lighttpd组拥有的所有文件,请执行:

# find / -group lighttpd -print