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

Linux find 命令是一个强大的工具,它使系统管理员能够根据广泛的搜索条件定位和管理文件和目录。 它可以根据名称、类型或扩展名、大小、权限等来查找目录和文件。

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

在本文中,我们将首先通过示例解释基本的 Linux 查找命令。 这将向您展示如何查找文件和目录。 然后,我们将向您展示如何使用 -exec 选项根据文件或目录的大小、权限等对文件或目录进行操作。

find 命令的一般语法是

find {path} {name -of-file or dir-to-search} {action-to-take}

在哪里,

  • 路径指定目录。
  • 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

该命令返回匹配搜索条件的文件和目录。 要仅查找文件或目录,您需要在命令中指定它。

仅查找文件或目录

仅对于文件,使用类型 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

从多个目录中搜索文件

要查找不同目录中的文件,请在命令中添加它们的路径。 在我们的例子中,我们将检查测试和数字目录。

find ./test ./numeric -name file22.txt -type f

输出

./test/file22.txt
/root/numeric/file22.txt

从所有目录中查找具有不同扩展名的多个文件

您可以使用 find 命令查找共享不同扩展名(例如 *.doc、*.txt *.pdf 等)的多个文件。这可以单独完成,一次一个扩展名,或者只使用一个包含所有扩展名的命令所需的扩展名。

寻找 。 -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 命令示例。

根据大小查找文件和目录

您可以找到所有小于、等于或大于一定大小、在一定范围内或为空的文件或目录。 根据您要搜索的文件或目录的类型,使用适当的大小格式。

  如何在 Linux 上轻松安装 AppImages

尺寸选项包括;

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 到 200 MB 之间

find / -size +100M -size -200M

查找大于 20kb 的目录

查找 / -type d -size +20k

查找空文件和目录。

文件

查找 ./ -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 天内修改过的文件

也可以通过命令查找/home目录下最近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
./[email protected]:~#

最近 10 分钟内访问的目录

find . -amin -10 -type d

查找符合特定权限的文件

句法

$ find -perm 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 命令中指定的模式匹配的文件进行操作。

      如何在 Linux 上玩 GreedFall

    查找文件和更改权限

    查找和更改某些文件类型的权限。 在我们的例子中,我们将使用具有不同权限的 PHP 文件,如下所示。

    [email protected]:~/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)

    结果

    [email protected]:~/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.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/

      如何在 Linux 上使用重命名命令

    根据年龄查找和移动文件

    查找早于指定日期的文件并将其移动到其他位置,例如存档。

    find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

    这将查找超过 20 天的 pdf 文件并将它们移动到 backup1 目录。

    查找和删除文件和目录

    在当前目录中查找和删除文件或目录的语法是

    寻找 。 -type f -name “要删除的文件” -exec rm -f {} ; 仅删除文件或

    寻找 。 -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’? n
    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 –delete

    查找并删除空目录

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

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

    另一种选择是使用删除而不是删除。

    find ./ -type d -empty -delete

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

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

    下一步是什么?

    继续在您的实验室或非生产环境中尝试上述 Linux 查找命令。 看看你是否可以使用一些来使用 Crontab 自动清理文件系统。 而且,要掌握 Linux,请查看此 在线课程.