Linux命令之find命令:40个find命令使用示例


原文地址:Linux命令之find命令:40个find命令使用示例

Linux的find命令是一个强大的工具,使系统管理员能够基于广泛的搜索条件查找和管理文件和目录。它可以按名称,类型或扩展名,大小,权限等查找目录和文件。在本文中我们分享了40个find命令使用示例,包含find+移动文件、find+复制文件、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发行版和版本。

查找文件和目录

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

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

find . -name file22.txt

输出

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

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

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

find ./test -name file22.txt

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

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

find ./test -name file*

输出

./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc

3.find按扩展名搜索文件

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

find . -name *.txt

输出

./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt

4.find按名称查找文件和目录

使用以下命令查找以字母开头的文件和目录qa。在我们的电脑,我们有qatree.txtqa.txt被命名文件以及目录qa

如果我们运行命令;

find ./ -name "qa*"

它返回以下输出

./test/qatree.pdf
./test/qa.txt
./home/qa

5.find仅查找文件或目录

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

仅文件

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

输出

./test/qatree.pdf
./test/qa.txt

仅目录

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

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

输出

./home/qa

6.find不区分大小写的find命令

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

find ./ -iname "qa*"

输出量

./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

7.find从多个目录搜索文件

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

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

输出

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

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

您可以使用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

9.find查找包含某些文本的文件

有时,您想访问包含某些文本的文件,但无法调用其文件名或位置。此命令使您可以查找包含目标文本的所有文件。

要查找所有包含单词“ 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

10.find根据文件大小查找文件和目录

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

查找一定大小的文件–等于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的目录

find / -type d -size +20k

查找空文件和目录。

空文件

find ./ -type f -size 0

或者

find ./ -type f –empty

空目录

find ./ -type d –empty

16.find按创建时间或修改时间查找文件

查找早于n天的文件

find /path/ -type f -name '*.txt' -mtime +8

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

17.find按修改日期查找

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

find . -mtime -17 -type f 

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

find . -mtime -10 -type d 

18.find根据访问或修改查找文件

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

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

find /home -atime +10

完全在10天前访问过的文件

find /home -atime 10

最近10天内访问过

find /home -atime -10

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

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

find /home -mtime -10 

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

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

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

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

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

find . -amin -10 -type f

输出

./.bash_history
./.profileroot@ubuntu1804:~#

最近10分钟内访问的目录

find . -amin -10 -type d

23.find查找符合特定权限的文件

$ 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权限,并且可以具有其他权限,但必须至少具有指定的权限。

23.find查找所有者可写的文件

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

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

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

find -perm -220

输出

./file2
./file1

24.find查找用户拥有的文件

查找用户拥有的所有文件(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

25.find查找用户拥有的特定文件

查找jack拥有的所有文本文件

find /home -user jack -iname "*.txt"

输出

/home/jack/docs/file32.txt

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

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命令中指定的模式匹配的文件。

27.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 {} ;

该命令会在PHP文件ver的目录,然后将他们的许可755rwxr-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

28.find查找和更改文件和目录权限

查找具有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

29.find查找和复制文件或目录

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

下面的命令会发现file22.tx牛逼文件,并将其复制到~/tmp/images目录中。

find -iname file22.txt -exec cp {} ~/tmp/images ;

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

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

find -iname '*.jpg' -exec cp {} ~/tmp/images ;

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

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

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

find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

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

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

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

find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

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

find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

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

find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

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

33.find根据创建时间查找并移动文件

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

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 {} ;

34.find仅查找和删除特定文件

要查找和删除以til开头的文件,请使用;

find . -type f -name "til*" -exec rm {} ; 

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

find . -type d -name "til*" -exec rm {} ;

35.find删除文件和目录

find . -name "til*" -exec rm -rf {} ; 

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

36.find按扩展名删除

下面是如何查找和删除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选项强制删除,并且用于文件和目录。

37.find查找和删除早于n天的文件

从当前目录中查找和删除超过20天的备份文件。

find . -type f -name '*.bak' -mtime +20 -exec rm {} ;

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

38.find仅查找和删除目录

删除名为 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不会被删除,ydir22将予删除。

39.find查找和删除空文件

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

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

find ./ -type f -size 0 | xargs rm -f

或者

find ./ -type f -size 0 –delete

40.find查找和删除空目录

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

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

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

find ./ -type d -empty -delete

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

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

总结

find命令一般可以用于清除没有用的文件,例如在清除系统垃圾时就可以用到find命令。你可以配合crontab来做定时清理系统垃圾的任务。以上就是40个find命令的示例。

评论

登录后评论

服务器优惠活动

Top