Linux中40个最佳Find命令示例

2020-11-04 10:10:33 浏览数 (2)

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

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

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

find命令的一般语法是

代码语言:javascript复制
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发行版和版本。

查找文件和目录

通过名称或扩展名查找特定文件

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

代码语言:javascript复制
find . -name file22.txt

输出量

代码语言:javascript复制
./test/file22.txt
./sales/file22.txt

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

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

代码语言:javascript复制
find ./test -name file22.txt

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

在我们的例子中,我们将在测试目录中查找所有以字母文件开头的文件

代码语言:javascript复制
find ./test -name file*

输出量

代码语言:javascript复制
./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc

按扩展名搜索文件

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

代码语言:javascript复制
find . -name *.txt

输出量

代码语言:javascript复制
./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt

按名称查找文件和目录

使用以下命令查找以字母开头的文件和目录qa。在我们的计算机中,我们有qatree.txtqa.txt文件以及一个名为的目录qa

如果我们运行命令;

代码语言:javascript复制
find ./ -name "qa*"

它返回以下输出

代码语言:javascript复制
./test/qatree.pdf
./test/qa.txt
./home/qa

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

仅查找文件或目录

仅对于文件,使用type f开关。

仅文件

代码语言:javascript复制
find ./ -type f -name "qa*"

输出量

代码语言:javascript复制
./test/qatree.pdf
./test/qa.txt

仅目录

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

代码语言:javascript复制
find ./ -type d -name "qa*"

输出量

代码语言:javascript复制
./home/qa

不区分大小写的find命令

所有带-nameswitch的搜索均区分大小写,并且不会以大写字母给出结果。要获取所有情况,请使用-iname选项。

代码语言:javascript复制
find ./ -iname "qa*"

输出量

代码语言:javascript复制
./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

从多个目录搜索文件

要在不同目录中查找文件,请在命令中添加其路径。在本例中,我们将检入testnumeric目录。

代码语言:javascript复制
find ./test ./numeric -name file22.txt -type f

输出量

代码语言:javascript复制
./test/file22.txt
/root/numeric/file22.txt

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

您可以使用find命令来查找共享不同的扩展,如多个文件*.doc*.txt*.pdf等等。这可以单独只使用一个命令,包括所有所需的扩展完成后,一个延长的时间,或。

find . -type f ( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" )

输出

代码语言:javascript复制
./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”的文件,请使用;

代码语言:javascript复制
find / -type f -exec grep -l -i "hyperconvergence" {} ;

输出量

代码语言:javascript复制
/root/numeric/hci
/root/HCIP

使用-i选项可以使命令忽略大小写,并查找文本是否大写,即超融合,超融合等。

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

代码语言:javascript复制
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;

输出量

代码语言:javascript复制
./numeric/hci

根据大小查找文件和目录

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

大小选项包括;

c –字节

k –千字节

M –兆字节

G –千兆字节

查找一定大小的文件–等于30MB

要搜索找到所有30MB的文件

代码语言:javascript复制
find / -size 30M

查找大于指定大小的文件

代码语言:javascript复制
<span style="color:#000000"><code class="language- language-undefined">find -size  2M</code></span>

复制

输出量

代码语言:javascript复制
. /Downloads/ubuntu18043.iso 
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

在当前目录中查找小于10MB的文件

代码语言:javascript复制
find . -type f -size -10M

查找大小在100-200MB之间的文件

查找特定范围(例如100到200 MB)之间的文件时

代码语言:javascript复制
find / -size  100M -size -200M

查找大于20kb的目录

find / -type d -size 20k

查找空文件和目录。

档案

find ./ -type f -size 0

要么

代码语言:javascript复制
find ./ -type f –empty

目录

代码语言:javascript复制
find ./ -type d –empty

按年龄或修改时间查找文件

查找早于n天的文件

代码语言:javascript复制
find /path/ -type f -name '*.txt' -mtime  8

-mtime 8会寻找txt那些超过8天的文件。

按修改日期

这将查找最近17个小时内修改过的文件

代码语言:javascript复制
find . -mtime -17 -type f 

查找最近10天内修改的目录

代码语言:javascript复制
find . -mtime -10 -type d 

根据访问或修改查找文件

根据访问的日期或时间查找文件。这使您可以查看在指定时间段内已访问或尚未访问的文件。

查看主目录中最近10天内未访问的文件。

代码语言:javascript复制
find /home -atime  10

完全在10天前访问的文件

代码语言:javascript复制
find /home -atime 10

最近10天内访问过

代码语言:javascript复制
find /home -atime -10

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

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

代码语言:javascript复制
find /home -mtime -10 

查找在特定时期内修改的文件。

例如,所有文件在6到15天之前在主目录中进行了修改。

代码语言:javascript复制
find /home -type f -mtime  6 -mtime -15

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

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

代码语言:javascript复制
find . -amin -10 -type f

输出量

代码语言:javascript复制
./.bash_history
./.profileroot@ubuntu1804:~#

最近10分钟内访问的目录

代码语言:javascript复制
find . -amin -10 -type d

查找符合特定权限的文件

句法

代码语言:javascript复制
$ find -perm mode

模式是许可,其中许可可以是数字(例如)644, 655, 700, 777或字母(例如u=x, a=r x,等)。

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

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

查找具有权限777的文件

代码语言:javascript复制
find -perm 777

输出量

代码语言:javascript复制
./file1

查找至少具有766 find -perm -766的文件

输出量

代码语言:javascript复制
./file2
./file1

该命令将查找其中

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

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

查找所有者可写的文件

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

代码语言:javascript复制
find -perm /222
.
./file2
./file3
./file1

上面的内容查找其所有者或组可写的文件。 这将返回可被任何一个但不一定两个都可写的文件。要查看两个文件均具有可写权限的文件,请使用-前缀。

代码语言:javascript复制
find -perm -220

输出量

代码语言:javascript复制
./file2
./file1

查找用户拥有的文件

查找杰克拥有的所有文件

代码语言:javascript复制
find /home -user jack

输出量

代码语言:javascript复制
/home/jack
/home/jack/examples.desktop
/home/jack/.gnupg
/home/jack/.gnupg/private-keys-v1.d
/home/jack/ans.cgi

查找用户拥有的特定文件

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

代码语言:javascript复制
find /home -user jack -iname "*.txt"

输出量

代码语言:javascript复制
/home/jack/docs/file32.txt

查找和列出文件和目录及其权限

代码语言:javascript复制
find -name "*.conf" | ls -l

输出量

代码语言:javascript复制
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文件,如下所示。

代码语言:javascript复制
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。

代码语言:javascript复制
find ver -name "*.php" -type f -exec chmod 755 {} ;

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

结果

代码语言:javascript复制
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权限

代码语言:javascript复制
find . -type f -perm 644 -exec chmod 655 {} ;

您还可以查找具有644权限的目录,并将其替换为755。

代码语言:javascript复制
find . -type d -perm 644

输出量

代码语言:javascript复制
./docs   

docs文件夹具有644权限

代码语言:javascript复制
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs

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

代码语言:javascript复制
find . -type d -perm 644 -exec chmod 755 {} ;

现在我们可以再次检查以查看到底是什么 755

代码语言:javascript复制
find . -type d -perm 755

输出 。 ./docs

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

Ls –la 命令提供以下详细信息

代码语言:javascript复制
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs

查找和复制文件或目录

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

下面的命令将找到file22.txt文件并将其复制到~/tmp/images目录中。

代码语言:javascript复制
find -iname file22.txt -exec cp {} ~/tmp/images ;

查找一种类型的文件并将其复制到目录

jpg在当前目录中查找带有扩展名的图像之类的文件并将其复制到其他位置(例如images文件夹),请使用;

代码语言:javascript复制
find -iname '*.jpg' -exec cp {} ~/tmp/images ;

这将找到所有jpg文件并将其复制到该~/tmp/images文件夹中。

查找一个文件并将其复制到多个目录

查找单个目录并将其复制到多个目录。

代码语言:javascript复制
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

这会发现文件HCI文件,并将其复制到的三个目录/tmp/dir1/ /tmp/dir2/$HOME/3/

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

将已知文件从目录移动到另一个目录。移动universal.php文件;

代码语言:javascript复制
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

搜索具有特定扩展名的文件并将其移动到其他文件夹

代码语言:javascript复制
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

查找某些文件并移至其他特定文件夹

代码语言:javascript复制
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

该命令查找名称以uni扩展名开头且具有任何扩展名的所有文件。然后将它们移动到目录/unifiles/

根据年龄查找和移动文件

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

代码语言:javascript复制
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开头的文件,请使用;

代码语言:javascript复制
find . -type f -name "til*" -exec rm {} ; 

查找和删除以til开头的目录

代码语言:javascript复制
find . -type d -name "til*" -exec rm {} ;

删除文件和目录

代码语言:javascript复制
find . -name "til*" -exec rm -rf {} ; 

这将删除以字母til开头的文件和目录。

按扩展名删除

下面是如何查找和删除txt当前目录中的所有文件。更换txt用另一部分如bakpdf或其他任何要删除。

代码语言:javascript复制
find . -type f -name "*.txt" -exec rm -f {} ;

如果希望系统在删除每个文件之前提示您进行确认,请添加-i选项,如下所示。

代码语言:javascript复制
find . -type f -name "*.txt" -exec rm -i {} ;

输出量

代码语言:javascript复制
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天的备份文件。

代码语言:javascript复制
find . -type f -name '*.bak' -mtime  20 -exec rm {} ;

这将删除所有.bak超过20天的文件。

仅查找和删除目录

删除名为 dir22

代码语言:javascript复制
find . -type d -name dir22 -exec rm -rf {} ;

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

代码语言:javascript复制
find . -type d -iname Dir22 -exec rm -rf {} ;

同时删除Dir22dir22

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

代码语言:javascript复制
find . -type d -iname Dir22 -exec rm -rf -i {} ;

输出 rm:删除目录'./Dir22'?ñ RM:删除目录” ./dir22' ?ÿ

在我们的例子中,我们输入n了目录Dir22,不会被删除,ydir22将予删除。

查找和删除空文件

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

代码语言:javascript复制
find ./ -type f -size 0 -exec rm -f {} ;

或 查找./ -type f -size 0 | xargs rm -f 或 find ./ -type f -size 0 –删除

查找和删除空目录

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

代码语言:javascript复制
find ./ -type d -empty -exec rmdir {} ;

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

代码语言:javascript复制
find ./ -type d -empty -delete

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

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

0 人点赞