40个Linux中find命令的最佳示例

Linux的find命令是一个功能强大的工具,可以根据各种搜索条件定位和管理文件和目录。它可以通过名称、类型、扩展名、大小、权限等来查找目录和文件。

除了定位文件和目录,结合其他命令使用find命令还可以对结果进行操作。添加-exec选项可以让系统管理员运行外部命令,并根据指定的条件(如大小、名称等)对符合条件的文件进行复制、移动、删除或更改权限等操作。

本文将首先介绍基本的Linux find命令及其示例。这将展示给您和目录。然后,我们将向您展示如何使用-exec选项来根据文件或目录的大小、权限等进行操作。

find命令的通用语法如下:

find {路径} {要搜索的文件或目录名称} {要执行的操作}

其中,

  • 路径指定目录。
  • 要搜索的文件或目录名称:要查找的文件或目录的名称。
  • 要执行的操作:例如复制、删除、移动等。

本教程将解释如何查找与指定模式匹配的文件和目录。我们还将看到如何对find命令定位的文件或目录执行操作。该指南以Ubuntu为基础,但适用于大多数Linux发行版和版本。

查找文件和目录

按名称或扩展名查找特定文件

要查找特定文件,请从根目录(/)运行以下命令。命令包含您要搜索的文件的确切名称。

find . -name file22.txt

输出

./test/file22.txt
./sales/file22.txt

请注意,结果包括路径。如果您不知道文件所在的目录,或者当该文件在多个位置时,这点很重要。

您还可以在当前位置的情况下在另一个目录中搜索文件。在这种情况下,您需要提供要搜索的目录的路径。

find ./test -name file22.txt

在另一个目录中查找特定文件

在我们的情况下,我们将在test目录中查找以文件开头的所有文件。

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.txtqa.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

从多个目录中查找文件

要在不同的目录中查找文件,请在命令中添加它们的路径。在我们的例子中,我们将在testnumeric目录中查找。

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使命令忽略大小写,并且无论是大写还是小写都能找到文本,例如hyperconvergenceHyperconvergence等。

要查找特定目录中的文件,只需将它们添加到命令中

find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;

输出

./numeric/hci

了解更多信息,请查看grep command examples

根据大小查找文件和目录

您可以查找所有比某个特定大小更小、相等或更大的文件或目录,或在某个范围内或为空的文件或目录。根据您要搜索的文件或目录的类型,使用适当的大小格式。

大小选项包括:

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之间的文件

要查找在100MB和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 +10

刚好在10天前访问的文件。

find /home -atime 10

在最近10天内访问的文件。

find /home -atime -10

查找在最近n天内修改的文件

您还可以使用以下命令查找在最近10天内修改的文件:

find /home -mtime -10 

查找在特定时间段内修改的文件

例如,在家目录中查找在6至15天前修改的所有文件。

find /home -type f -mtime +6 -mtime -15

在最近10分钟内访问的文件和目录

要查找在最近10分钟内访问的文件,请使用-amin选项。

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等)。

您可以使用以下三种不同的方式指定权限。

  1. 没有前缀时,表示要查找具有指定权限的文件。
  2. 使用“-”表示至少具有指定权限的文件。这将返回具有指定权限以及其他更高权限的文件。
  3. 使用“/”需要指定拥有者或组以及权限的文件。

查找具有权限777的文件

find -perm 777

输出

./file1

查找至少具有766权限的文件
find -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

输出

总共 120
drwxr-xr-x 2 root root 4096 12月 31 13:19 backup2
drwxr-xr-x 2 root root 4096 1月 4 11:57 Desktop
drwxr-xr-x 2 root root 4096 12月 31 11:50 Documents
drwxr-xr-x 2 root root 4096 12月 31 12:27 Downloads
-rw-r--r-- 1 root root 0 1月 4 12:02 file22.doc
drwxr-xr-x 2 root root 4096 1月 4 12:14 file23
-rw-r--r-- 1 root root 0 1月 4 12:23 file23.txt

查找并对结果进行操作

在本节中,我们将看看如何对与find命令中指定的模式匹配的文件进行操作。

查找文件并更改权限

查找并更改特定文件类型的权限。在我们的案例中,我们将使用具有不同权限的PHP文件进行操作,如下所示。

jack@ubuntu1804:~/ver$ ls -la

总共 8
drwxrwxr-x 2 jack jack 4096 1月 3 14:11 .
drwxr-xr-x 8 jack jack 4096 1月 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 1月 3 14:06 ans.php
-rw-rw-r-- 1 jack jack 0 1月 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 1月 3 14:06 query.php
-rw-rw-r-- 1 jack jack 0 1月 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 1月 3 14:06 text.php
-rw-rw-r-- 1 jack jack 0 1月 3 14:11 vary.php

我们现在将查找所有PHP文件(如上所示),并将其权限替换为755

find ver -name "*.php" -type f -exec chmod 755 {} ;

该命令在ver目录中查找PHP文件,然后将它们的权限设置为755rwxr-xr-x

结果

jack@ubuntu1804:~/ver$ ls -la
总共 8
drwxrwxr-x 2 jack jack 4096 1月 3 14:11 .
drwxr-xr-x 8 jack jack 4096 1月 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 1月 3 14:06 ans.php
-rwxr-xr-x 1 jack jack 0 1月 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 1月 3 14:06 query.php
-rwxr-xr-x 1 jack jack 0 1月 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 1月 3 14:06 text.php
-rwxr-xr-x 1 jack jack 0 1月 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 1月 3 12:45 docs

要将其设置为755,我们运行

find . -type d -perm 644 -exec chmod 755 {} ;

现在我们可以再次检查以查看哪些具有755

find . -type d -perm 755

输出
.
./docs

从上面我们可以看到根目录和docs目录具有755权限。

Ls –la命令给出以下详细信息

drwxr-xr-x 2 jack jack 4096 1月 3 12:45 docs

查找并复制文件或目录

查找并将特定文件复制到目录

以下命令将找到file22.txt文件并将其复制到~/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 "要删除的文件" -exec rm -f {} ; 只删除文件 或者

find . -type d -name "要删除的目录" -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 替换为其他扩展名,如 bakpdf 或任何您想要删除的扩展名。

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 天的文件。

仅查找并删除目录

要删除名为 dir22 的目录

find . -type d -name dir22 -exec rm -rf {} ;

确保匹配目录名称的大小写,或使用 -iname 选项。

find . -type d -iname Dir22 -exec rm -rf {} ;

将同时删除 Dir22dir22

在删除之前进行确认,请使用 -i 选项。

find . -type d -iname Dir22 -exec rm -rf -i {} ;

输出
rm: remove directory ‘./Dir22’? n
rm: remove directory ‘./dir22’? y

在我们的情况下,我们输入了n以保留目录Dir22,该目录不会被删除,并且输入了y以删除dir22目录。

查找并删除空文件

您可以使用以下任何一种命令来定位并自动删除空文件。

find ./ -type f -size 0 -exec rm -f {} ;

或者
find ./ -type f -size 0 | xargs rm -f
或者
find ./ -type f -size 0 –delete

查找并删除空目录

为了删除空目录,我们将使用d选项。

find ./ -type d -empty -exec rmdir {} ;

另一种选择是使用delete而不是remove。

find ./ -type d -empty -delete

请注意,从计算机中删除系统或关键文件可能会损坏操作系统或应用程序,或导致重要数据丢失。

为了避免意外删除,最好使用非root用户帐户。同时,请确保您删除的是无用的正确文件,并备份所有数据文件以防万一。

接下来是什么?

请在您的实验室或非生产环境中尝试上述Linux find命令。看看您是否可以使用其中一些命令来自动清理文件系统,使用Crontab。要掌握Linux,请查看此online course

类似文章