个性化阅读
专注于IT技术分析

如何在Linux上使用find命令?包含40个示例

本文概述

该发现是功能强大的命令行工具, 使系统管理员可以根据广泛的搜索条件来定位和管理文件和目录。它可以通过文件的名称, 类型或扩展名, 大小, 权限等来查找文件。

除了查找文件和目录之外, 将find命令与其他命令结合使用还可以使你对结果采取行动。添加-exec选项使sysadmins可以运行外部命令并执行诸如复制, 移动, 删除或更改符合指定条件(例如大小, 名称等)的文件的权限之类的操作。

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

find命令的一般语法是

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

其中

  • path指定目录。
  • 要搜索的文件或目录的名称:要查找的文件或目录的名称
  • 采取行动:例如复制, 删除, 移动等

在本教程中, 我们将说明如何查找与指定模式匹配的文件和目录。我们还将看到如何对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

按扩展名搜索文件

要查找具有特定扩展名的文件, 请将其添加到命令中。

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

仅目录

添加类型d选项以仅查找目录。

find ./ -type d -name "qa*"

输出如下

./home/qa

不区分大小写的find命令

使用-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选项可以使命令忽略大小写并查找文本是否大写, 即超融合, 超融合等。

要在特定目录中查找文件, 只需将其添加到命令中

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

输出如下

./numeric/hci

根据大小查找文件和目录

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

大小选项包括;

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的目录

找到/ -d型-size + 20k

查找空文件和目录。

档案

查找./ -type f -size 0

or

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天之内修改过的/ home目录中查找文件;

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

你可以通过以下三种不同方式指定模式。

  1. 当你要查找具有指定确切权限的文件时, 不带前缀。
  2. 带有”-“的文件至少具有指定的权限。这将返回具有指定权限以及其他更高权限的文件。
  3. 使用” /”需要指定拥有文件许可权的所有者或组。

查找具有权限777的文件

find -perm 777

输出如下

./file1

查找至少包含766个文件

查找-烫发-766

输出如下

./file2
./file1

该命令将查找其中

  • 文件所有者具有读取/写入/执行权限。
  • 组具有读/写权限
  • 其他人具有读/写权限

这样, 它将返回两个符合此条件的文件-file1和file2。这些文件不需要具有确切的766权限, 并且可以具有其他权限, 但必须至少具有指定的权限。

查找所有者可写的文件

现在, 我们将使用” /”查找其所有者, 组或其他人可写的文件。

find -perm /222
.
./file2
./file3
./file1

上面的内容查找其所有者或组可写的文件。

这将返回可被任何一个但不一定两个都可写的文件。要查看两个文件均具有可写权限的文件, 请使用-前缀。

find -perm -220

输出如下

./file2
./file1

查找用户拥有的文件

查找杰克拥有的所有文件

find /home -user jack

输出如下

/home/jack
/home/jack/examples.desktop
/home/jack/.gnupg
/home/jack/.gnupg/private-keys-v1.d
/home/jack/ans.cgi

查找用户拥有的特定文件

查找杰克拥有的所有文本文件

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文件, 如下所示。

[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

输出如下

.

./docs

从上面我们可以看到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扩展名的图像)并将其复制到其他位置(例如images文件夹), 请使用;

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 /的三个目录中

查找文件并将其移动到其他目录

将已知文件从目录移动到另一个目录。移动通用文件。

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目录。

查找和删除文件和目录

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

找 。 -type f-名称”要删除的文件” -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″? ñ

rm:删除目录” ./dir22″?和

在我们的示例中, 我们为目录Dir22键入了n, 该目录将不会被删除;为dir22输入y, 现在将被删除。

查找和删除空文件

你可以使用以下任何命令来查找空文件并自动将其删除。

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

or

查找./ -type f -size 0 | xargs rm -f

or

查找./ -type f -size 0 –删除

查找和删除空目录

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

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

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

find ./ -type d -empty -delete

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

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

下一步是什么?

继续并在你的实验室或非生产环境中尝试它们。查看是否可以使用某些工具通过Crontab自动执行文件系统清理。而且, 要掌握Linux, 请查看此在线课程。

赞(0)
未经允许不得转载:srcmini » 如何在Linux上使用find命令?包含40个示例

评论 抢沙发

评论前必须登录!