Linux find命令是一个功能强大的工具,允许系统管理员根据各种搜索条件查找和管理文件和目录。您可以按名称、类型或扩展名、大小、权限等搜索目录和文件。
除了搜索文件和目录之外,您还可以将find命令与其他命令结合起来对结果执行操作。添加-exec选项允许系统管理员运行外部命令并对符合指定条件(如大小或名称)的文件执行复制、移动、删除或更改权限等操作。
本文提供了基本 Linux find 命令的示例。本节介绍如何搜索文件和目录。接下来,我们将向您展示如何使用-exec选项根据大小、权限等操作文件或目录。
find 命令的一般语法是:
find {path} {name -of-file or dir-to-search} {action-to-take}在哪里,
- 指定
path目录。 -
name-of file or dir-to-search: 要搜索的文件或目录的名称 action-to-take:复制、删除、移动等。
本教程向您展示如何查找与指定模式匹配的文件和目录。它还描述了如何对 find 命令找到的文件或目录执行操作。本指南基于 Ubuntu,但适用于大多数 Linux 发行版和版本。
搜索文件和目录

按名称或扩展名搜索特定文件
要搜索特定文件,请从根 (/) 运行以下命令:该命令包含您正在搜索的文件的确切名称。
find . -name file22.txt输出
./test/file22.txt
./sales/file22.txt请注意,结果包括路径。如果您不知道文件位于哪个目录,或者文件位于多个位置,这一点很重要。
您还可以在其他目录中搜索文件,同时保留在当前位置。在这种情况下,您必须指定要搜索的目录的路径。
find ./test -name file22.txt 
在另一个目录中查找特定文件
在我们的例子中,我们将搜索测试目录中以字母文件开头的所有文件。
find ./test -name file*输出
./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc 
按扩展名查找文件
要在 Linux 上搜索具有特定扩展名的文件,请将其添加到命令中。
find . -name *.txt输出
./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt 
按名称查找文件和目录
使用以下命令搜索以字母qa开头的文件和目录。我们的计算机有qatree.txt和qa.txt文件以及名为qa目录。
当我运行命令时,
find ./ -name "qa*"返回以下输出
./test/qatree.pdf
./test/qa.txt
./home/qa此命令返回与您的搜索条件匹配的文件和目录。要仅搜索文件或目录,您必须在命令中指定。

仅搜索文件或目录
仅对于文件,请使用type f开关。
仅文件
find ./ -type f -name "qa*"输出
./test/qatree.pdf
./test/qa.txt仅目录
要仅搜索目录,请添加type d选项。
find ./ -type d -name "qa*"输出
./home/qa不区分大小写的搜索命令
使用-name开关的所有搜索都区分大小写,并且不会返回大写结果。使用-iname选项获取所有案例。
find ./ -iname "qa*"输出
./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa在多个目录中搜索文件
要搜索其他目录中的文件,请向命令添加路径。此示例检查test和numeric目录。
find ./test ./numeric -name file22.txt -type f输出
./test/file22.txt
/root/numeric/file22.txt从所有目录中查找具有不同扩展名的多个文件
find 命令允许您查找共享不同扩展名的多个文件,例如*.doc 、 *.txt *.pdf等。您可以单独执行此操作,一次一个扩展,或使用一个包含所有扩展的命令。所需的扩展。
find . -type f ( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" )
输出
./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt查找包含特定文本的文件
有时您想要访问包含特定文本的文件,但您不记得其文件名或位置。此命令允许您搜索包含目标文本的所有文件。
要查找包含单词“hyperconvergence”的所有文件,请使用:
find / -type f -exec grep -l -i "hyperconvergence" {} ;输出
/root/numeric/hci
/root/HCIP使用–i选项时,该命令不区分大小写,并且无论文本是否大写都会搜索文本(例如 hyperconvergence 、 Hyperconvergence 等)。
要搜索特定目录中的文件,只需将它们添加到命令中即可。
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;输出
./numeric/hci让我们仔细看看 grep 命令示例。
根据大小查找文件和目录
您可以搜索小于特定大小、在特定范围内或为空的所有文件或目录。根据您要搜索的文件或目录的类型,使用适当的大小格式。
尺寸选项包括:
c – 字节
k – 千字节
M兆字节
G千兆字节
查找特定大小(相当于30MB)的文件
搜索 搜索所有 30MB 文件
find / -size 30M查找大于指定大小的文件
find -size +2M输出
. /Downloads/ubuntu18043.iso
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c在当前目录中查找小于10MB的文件
find . -type f -size -10M查找大小在 100 到 200MB 之间的文件
搜索特定范围(例如 100-200MB)内的文件时
find / -size +100M -size -200M查找大于 20kb 的目录
find / -type d -size +20k
查找空文件和目录。
文件
find ./ -type f -size 0
或者
find ./ -type f –empty目录
find ./ -type d –empty按年龄或修改时间查找文件
查找超过 n 天的文件
find /path/ -type f -name '*.txt' -mtime +8 -mtime +8搜索超过 8 天的txt文件。
修改日期顺序
这将搜索过去 17 小时内修改的文件
find . -mtime -17 -type f 查找最近 10 天内修改的目录
find . -mtime -10 -type d 根据访问或修改查找文件
根据访问日期或时间搜索文件。这使您可以查看在指定时间段内哪些文件已被访问或未访问。
显示您的主目录中过去 10 天内未访问过的文件。
find /home -atime +1010 天前访问过的文件
find /home -atime 10过去 10 天内访问过
find /home -atime -10查找最近n天内修改的文件
您还可以使用以下命令搜索/home目录中最近 10 天内修改过的文件:
find /home -mtime -10 查找在特定时间段内修改的文件。
例如,您的主目录中在 6 到 15 天前修改过的所有文件。
find /home -type f -mtime +6 -mtime -15过去 10 分钟内访问的文件和目录
使用 -amin 选项搜索最近 10 分钟内访问过的文件。
find . -amin -10 -type f输出
./.bash_history
./.profileroot@ubuntu1804:~#过去 10 分钟内访问过的目录
find . -amin -10 -type d查找与特定权限匹配的文件
句法
$ find -perm mode这里,mode是644, 655, 700, 777等数字,或者u=x, a=r+x,的权限或者字母。
可以通过三种不同的方式指定模式:
- 如果要搜索具有指定的确切权限的文件,请不要添加前缀。
- 至少具有指定权限的文件用“
-”标记。这将返回具有指定权限和附加更高权限的文件。 - 要使用“
/”,您必须指定对该文件具有权限的所有者或组。
搜索权限为777的文件
find -perm 777输出
./file1搜索至少766文件
搜索-perm-766
输出
./file2
./file1这个命令:
- 文件所有者拥有读/写/执行权限。
- 组有读/写权限
- 其他人有读/写权限
因此,将返回满足此条件的两个文件(file1 和 file2)。该文件不需要确切的766权限,也可以具有其他权限,但它至少需要指定的权限。
查找所有者可写的文件
现在使用“ / ”搜索所有者、组或其他用户可写的文件。
find -perm /222
.
./file2
./file3
./file1上面的示例搜索所有者或组可写的文件。
这将返回一个可由任何一方写入的文件,但不一定可由两者写入。要显示都具有写入权限的文件,请使用 – 前缀。
find -perm -220输出
./file2
./file1查找用户拥有的文件
查找 Jack 拥有的所有文件
find /home -user jack输出
/home/jack
/home/jack/examples.desktop
/home/jack/.gnupg
/home/jack/.gnupg/private-keys-v1.d
/home/jack/ans.cgi搜索用户拥有的特定文件
查找 Jack 拥有的所有文本文件
find /home -user jack -iname "*.txt"输出
/home/jack/docs/file32.txt搜索文件和目录并列出它们及其权限。
find -name "*.conf" | ls -l输出
total 120
drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents
drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
-rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
-rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt找到结果并采取行动
在本节中,我们将了解如何处理与 find 命令指定的模式匹配的文件。
查找文件并更改权限
查找并更改特定文件类型的权限。在此示例中,我们将使用具有不同权限的 PHP 文件,如下所示。
jack@ubuntu1804:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php接下来,找到所有 PHP 文件(上面)并将其权限替换为 755。
find ver -name "*.php" -type f -exec chmod 755 {} ;此命令在ver目录中搜索 PHP 文件并将其权限设置为755 ( rwxr-xr-x )。
结果
jack@ubuntu1804:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php查找并更改文件和目录权限
找到具有644权限的文件并将其更改为具有655权限。
find . -type f -perm 644 -exec chmod 655 {} ;您还可以搜索权限为644的目录并将其替换为755。
find . -type d -perm 644输出
./docs docs文件夹有644个权限
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs要将其设置为755 ,请运行以下命令:
find . -type d -perm 644 -exec chmod 755 {} ;现在我们可以再次看看755到底是什么了。
find . -type d -perm 755输出
。
./文档
从上面可以看到root和docs目录的权限都是755。
Ls –la命令提供以下详细信息:
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs查找并复制文件或目录
查找特定文件并将其复制到目录中
下面的命令找到file22.tx t 文件并将其复制到~/tmp/images目录。
find -iname file22.txt -exec cp {} ~/tmp/images ;查找一种类型的文件并将其复制到目录中
要在当前目录中查找扩展名为jpg的图像等文件并将其复制到另一个位置(例如图像文件夹),请使用:
find -iname '*.jpg' -exec cp {} ~/tmp/images ;这将找到所有 jpg 文件并将它们复制到~/tmp/images文件夹。
查找一个文件并将其复制到多个目录
搜索单个目录并将其复制到多个目录。
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;这将搜索hci文件并将其复制到三个目录/tmp/dir1/ /tmp/dir2/和$HOME/3/ 。
找到一个文件并将其移动到另一个目录
将已知文件从一个目录移动到另一个目录。移动universal.php文件;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;查找具有特定扩展名的文件并将其移动到另一个文件夹
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;查找特定文件并将其移动到特定的不同文件夹
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;此命令查找名称以uni开头且具有任意扩展名的所有文件。然后将它们移动到目录/unifiles/ 。
根据年龄查找和移动文件
查找早于指定天数的文件并将其移动到另一个位置,例如存档。
find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;这将找到超过 20 天的 PDF 文件并将它们移动到 backup1 目录。
查找并删除文件和目录
查找并删除当前目录中的文件或目录的语法为:
find . -type f -name "file to delete" -exec rm -f {} ;只删除文件
find . -type d -name "dir-to-delete" -exec rm -rf {} ;仅删除一个目录
仅搜索并删除特定文件
要查找并删除以 til 开头的文件,请使用:
find . -type f -name "til*" -exec rm {} ; 搜索并删除以 til 开头的目录
find . -type d -name "til*" -exec rm {} ;删除文件和目录
find . -name "til*" -exec rm -rf {} ; 这将删除以字母 til 开头的文件和目录。
按扩展名删除
下面是如何查找并删除当前目录下的所有txt文件。 txt以及您要删除的另一个扩展名,例如bak或pdf 。
find . -type f -name "*.txt" -exec rm -f {} ;如果您希望系统在删除每个文件之前提示您确认,请添加 -i 选项,如下所示。
find . -type f -name "*.txt" -exec rm -i {} ;输出
rm: remove regular empty file './File22.txt'? y
rm: remove regular empty file './file22.txt'? y
rm: remove regular empty file './file23.txt'?默认情况下, -rm不删除目录,因此必须使用–r选项来确保递归删除。这可确保删除空目录和包含文件的目录。 -f选项强制删除并用于文件和目录。
查找并删除超过 n 天的文件
从当前目录查找并删除超过 20 天的备份文件。
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;这将删除所有超过 20 天的 .bak 文件。
仅搜索和删除目录
删除目录dir22
find . -type d -name dir22 -exec rm -rf {} ;确保目录名称的大小写匹配,或使用-iname选项。
find . -type d -iname Dir22 -exec rm -rf {} ;删除Dir22和dir22
删除前使用 -i 选项进行确认。
find . -type d -iname Dir22 -exec rm -rf -i {} ;输出
rm: 是否要删除目录“./Dir22”?
rm: 是否要删除目录“./dir22”?
在此示例中,我们为不会删除的目录Dir22输入n ,为将删除的目录dir22输入y 。
查找并删除空文件
您可以使用以下命令之一查找并自动删除空文件:
find ./ -type f -size 0 -exec rm -f {} ;或者
查找 ./ -type f -size 0 | xargs rm -f
或者
查找./ -type f -size 0 –删除
查找并删除空目录
使用d选项删除空目录。
find ./ -type d -empty -exec rmdir {} ;另一种方法是用delete代替delete。
find ./ -type d -empty -delete请注意,从计算机中删除系统文件或重要文件可能会损坏您的操作系统或应用程序或导致重要数据丢失。
为避免意外删除,我们建议使用非 root 用户帐户。另外,请确保删除不再有用的相应文件,并备份所有数据文件以防万一。
接下来怎么办?
在实验室或非生产环境中尝试上述 Linux find 命令。看看是否可以使用 Crontab 自动清理文件系统。查看此在线课程来掌握 Linux。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

