查找和查找文件
在inux中如何搜索文件
使用locate
命令查找文件
locate
命令是一个非常快速和有效的快速定位文件的方式。 locate 命令在速度上胜过find命令的原因是由于其位置存储在内部数据库中。这些数据库是由称为updateb的进程创建的,该进程通常在cron计时器上运行。locate命令匹配路径名的任何部分。
john@john-desktop:~$ locate updatedb /etc/updatedb.conf /etc/alternatives/updatedb /usr/bin/updatedb /usr/bin/updatedb.mlocate /usr/share/man/man5/updatedb.conf.5.gz /usr/share/man/man8/updatedb.8.gz
在上面的示例中,我们将updatedb
传递给了locate命令。该命令的输出几乎立即返回。如您所见,任何包含updatedb
的文件或程序都被返回。传递给locate命令的模式越小,可以显着增加结果:
john@john-desktop:~$ locate updated /etc/updatedb.conf /etc/alternatives/updatedb /usr/bin/updatedb /usr/bin/updatedb.mlocate /usr/share/icons/Humanity/actions/16/package-installed-updated.svg /usr/share/icons/hicolor/16x16/actions/package-installed-updated.png /usr/share/man/man5/updatedb.conf.5.gz /usr/share/man/man8/updatedb.8.gz
在上面的示例中,我们将模式从updatedb
更改为updated
。然后,由于模式与更多文件匹配,locate命令返回更多输出。
updatedb: 大多数Linux系统可能会使用cron作业来启动updateb进程的运行。如果系统繁忙,则可能需要修改此作业,使其每周运行一次或在安静的时间内运行。在运行updatedb进程时,将发生许多磁盘活动。在手册页中或通过执行updatedb --help
命令可以找到更多信息。
slocate: 在一些Linux系统中,locate命令已经被另一个版本的命令slocate
所取代。如果你想知道,slocate是Secure Locate
的缩写。slocate命令将权限存储在其数据库中。这将阻止系统的普通用户查看他们通常没有权限查看的目录。该命令的语法和用法与标准的locate版本相同。
find命令示例
基本的find找命令说明
Linux 如何在某个目录下根据文件名进行搜索文件
在root文件系统/
中搜索名为findme.txt
的文件。如果找到了该文件,那么它将显示在您的屏幕上。
find / -name findme.txt -type f -print
在上面的例子中,我们指定了type -f
来指定我们只查找常规文件。如果您没有指定类型,那么您可能会得到返回的目录和其他文件系统对象。-print
选项指定输出到标准输出(您的屏幕)。在现代Linux系统上不再需要-print
选项,因为这是默认选项。
Linux 如何同时在多个目录下搜索某个文件
find /usr /home -name findme.txt -type f -print
在上面的例子中,我们指定了两个单独的目录来搜索常规文件findme.txt
。
如果你想在当前目录和所有子目录中搜索,那么你可以执行如下命令:
find . -name Chapter1 -type f -print
下面这个示例的find命令将在目录/home/john
中搜索以字符bmg
开头的任何文件。该模式将匹配任何启动bmg
的文件。
find /home/john -name "bmg*" -type f -print
下面这个示例,在目录中搜索扩展名为.sh
的任何文件。
find /home/john -name "*.sh" -type f -print
如何使用Linux find命令查找目录
如前所述,我们可以使用type
参数指定文件类型。如果我们要查找目录,那么我们可以将参数更改为-type d
。这将搜索范围缩小到目录。
find /home/john -type d -name test -print
在上面的例子中,我们搜索位于/home/John
目录下的所有名为test的目录。
Linux搜索文件时如何排除在结果中的某些文件
有时你可能想要搜索很多文件,但是,想要排除某些文件类型:
find /home/john/scripts -type f -not -name "*.ksh" -print
在上面的示例中,我们将搜索除以.ksh
结尾的文件之外的所有文件类型。要查找与模式不匹配的所有文件,我们使用-not
标志。
Linux搜索文件时如何不区分大小写
使用与前面相同的语法,我们可以指示find
命令忽略其模式的大小写。这可以通过将-name
参数改为-iname
来实现。
find . -iname test
上面将搜索任何与Test
、test
、TEST
等模式匹配的文件
还可以通过添加type d
或type f
,您可以在搜索文件或目录之间进行切换。
Linux如何查找包含特定文本的文件
Linux命令行的主要功能之一是能够将多个命令组合在一起以充当一个命令。在以下示例中,我们将向您介绍新命令grep
。本节稍后将介绍grep
命令的更多详细信息。
在下面的示例中,我们将搜索所有以.sh
扩展名结尾并且包含字符lovelinux
的文件。传递给grep
命令的-l
参数指示grep仅打印找到匹配项的文件名。
find . -type f -name "*.sh" -exec grep -l lovelinux {} \;
在上面的例子中,{}
包含由find
命令找到的任何匹配的结果。然后使用grep
命令来搜索它的内容。
find . -type f -name "*.sh" -exec grep -il lovelinux {} \;
上面的示例与前面的示例几乎相同,但是这次我们向grep命令添加了和额外的参数。-i
与grep
命令一起使用时,将忽略大小写。如果找到了以"结尾的文件。并包含文本lovelinux
或LOVELINUX
或LoveLinux
,则这些将被视为匹配。
更改查找到的文件的权限
在下面的例子中,我们将搜索/home/john/script
目录,寻找扩展名为.sh
的脚本文件。任何找到的文件的权限都会被chmod
命令改变。
find /home/john/script -name "*.sh" -type f -exec chmod 644 {} \;
使用ls列出所有找到的文件
通常,您会遇到这样一个需求,即必须对文件进行排序以检查其权限,创建日期等。
值得庆幸的是,可以使用find命令和ls
命令一起使用。
find . -name "*.sh" -exec ls -ld {} \;
在上面的例子中,我们看到在ls
命令中使用了-l
选项来输出长列表。
Linux搜索符合条件的文件并删除
下面的命令是非常有用的,但是,当我们使用一个可能具有破坏性的命令时,必须非常小心和注意。
find . -type f -name "Tes*" -exec rm {} \;
任何以Tes
开头的文件将被传递到rm
命令进行删除。虽然这很有用,但也可能很危险。一般都是将rm
命令替换为ls
先进行测试。此外,您可以将-name
参数修改为-iname
以忽略大小写。
find . -type f -name "Tes*" -exec ls -l {} \;
没问题后,才将ls改成rm进行删除。
查找多种扩展名的文件
有时,可能希望搜索一种以上文件类型的文件。您可能要搜索扩展名为.sh
的脚本以及扩展名为.pl
的perl脚本。
find . -type f \( -name "*.sh" -o -name "*.pl" \)
要添加其他模式以进行搜索,只需在命令行中添加另一个-o
选项。
按修改时间查找文件
找到当前目录中最近7天内修改的所有文件和目录。
find . -mtime -7 -print
根据文件权限进行文件查找
以下示例在当前目录中查找其权限设置为读取的任何文件:
find . -perm -g=r -type f -exec ls -l {} \;
下面的例子演示了-perm -g=r
和-perm g=r
之间的区别。后者的find命令只查找组设置为read的文件。
john@john-desktop:~/test_examples$ find . -perm -g=r -type f -exec ls -l {} \; -rwxrwxrwx 1 john john 0 Jan 22 21:16 ./file3 -rwxrwxr-x 1 john john 0 Jan 22 21:16 ./file1 ----r----- 1 john john 0 Jan 22 21:32 ./file< -rw-rw---- 1 john john 0 Jan 22 21:27 ./file4 -r--r--r-- 1 john john 0 Jan 22 21:16 ./file2 john@john-desktop:~/test_examples$ find . -perm g=r -type f -exec ls -l {} \; ----r----- 1 john john 0 Jan 22 21:32 ./file
按八进制权限查找文件
当要对多个文件进行权限检查时,这个特殊的方法非常有用方便:
john@john-desktop:~/test_examples$ find . -perm 040 -type f -exec ls -l {} \; ----r----- 1 john john 0 Jan 22 21:32 ./file john@john-desktop:~/test_examples$ find . -perm 777 -type f -exec ls -l {} \; -rwxrwxrwx 1 john john 0 Jan 22 21:16 ./file3
查找空文件-大小为零字节
如果需要查找大小为零字节的文件,则可以执行以下命令:find . -empty
john@john-desktop:~/test_examples$ ls -l total 12 ----r----- 1 john john 0 Jan 22 21:32 file -rwxrwxr-x 1 john john 29 Jan 22 21:52 file1 -r--r--r-- 1 john john 0 Jan 22 21:16 file2 -rwxrwxrwx 1 john john 29 Jan 22 21:52 file3 -rw-rw---- 1 john john 29 Jan 22 21:52 file4 john@john-desktop:~/test_examples$ find . -empty ./file ./file2
Linux在当前目录中找到10个最大的文件
在当前目录中找到最大的10个文件
john@john-desktop:~/Documents/Weather$ find . -type f -exec ls -s {} \; | sort -n -r | head -10 9304 ./Riddle_et_al_accepted_withFigs.pdf 7624 ./11_Scaife_Stratosphere.odp 3976 ./long_range_forecast_winter_2012-13_full_report.pdf 3388 ./weather_lecture2.pdf 2012 ./Weather_&_Climate.pdf 1944 ./weatherwise_ws1080pc-solar_manual_a.doc 1912 ./FMH1.pdf 1680 ./weather_lecture3.pdf 1444 ./weather_lecture1.pdf 1084 ./Understanding the GFS charts-2nd version-13 sept 10.pdf john@john-desktop:~/Documents/Weather$
查找比指定文件新的文件
此命令使我们可以查找比指定文件新的文件:
ohn@john-desktop:~/test_examples$ ls -l total 12 ----r----- 1 john john 0 Jan 22 21:32 file -rwxrwxr-x 1 john john 29 Jan 22 21:52 file1 -r--r--r-- 1 john john 0 Jan 22 21:16 file2 -rwxrwxrwx 1 john john 29 Jan 22 21:52 file3 -rw-rw---- 1 john john 29 Jan 22 21:52 file4 john@john-desktop:~/test_examples$ find . -newer file . ./file3 ./file1 ./file4
Linux如何根据文件大小查找文件
在以下示例中,我们将学习如何查找大于特定大小的文件,小于特定大小的文件或等于给定大小的文件。
john@john-desktop:~$ find . -size +1000M ./VirtualBox VMs/CentOS/CentOS.vdi ./VirtualBox VMs/Open SUSE 12.1/Open SUSE 12.1.vdi ./CentOS_iso_6.3/CentOS-6.3-i386-bin-DVD1.iso john@john-desktop:~$ cd Puppy_Linux_Installer/ john@john-desktop:~/Puppy_Linux_Installer$ ls -lh total 126M -rw-rw-r-- 1 john john 126M Mar 5 2012 Puppy Linux 531.exe john@john-desktop:~/Puppy_Linux_Installer$ find . -size 126M ./Puppy Linux 531.exe john@john-desktop:~/test_examples$ find -size -1k ./file ./file2
Linux如何查找某个用户的所有文件
如果需要查找特定用户拥有的所有文件,则可以指定-user
选项:
john@john-desktop:~/test_examples$ find . -user john