查找和查找文件

时间:2019-04-29 03:17:27  来源:igfitidea点击:

在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

上面将搜索任何与TesttestTEST等模式匹配的文件
还可以通过添加type dtype 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命令添加了和额外的参数。-igrep命令一起使用时,将忽略大小写。如果找到了以"结尾的文件。并包含文本lovelinuxLOVELINUXLoveLinux,则这些将被视为匹配。

更改查找到的文件的权限

在下面的例子中,我们将搜索/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