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.txt
和qa.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
选项以仅查找目录。
find ./ -type d -name "qa*"
输出量
代码语言:javascript复制./home/qa
不区分大小写的find命令
所有带-name
switch的搜索均区分大小写,并且不会以大写字母给出结果。要获取所有情况,请使用-iname
选项。
find ./ -iname "qa*"
输出量
代码语言:javascript复制./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa
从多个目录搜索文件
要在不同目录中查找文件,请在命令中添加其路径。在本例中,我们将检入test
和numeric
目录。
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天内修改的目录中查找文件:
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,
等)。
您可以通过以下三种不同方式指定模式。
- 当您要查找具有指定确切权限的文件时,不带前缀。
- 使用“
-
”表示具有至少指定权限的文件。这将返回具有指定权限以及其他更高权限的文件。 - 使用“
/
”需要指定拥有文件许可权的所有者或组。
查找具有权限777的文件
代码语言:javascript复制find -perm 777
输出量
代码语言:javascript复制./file1
查找至少具有766
find -perm -766的文件
输出量
代码语言:javascript复制./file2
./file1
该命令将查找其中
- 文件所有者具有读取/写入/执行权限。
- 组具有读/写权限
- 其他人具有读/写权限
这样,它将返回两个符合此条件的文件-file1和file2。这些文件不需要具有确切的766
权限,并且可以具有其他权限,但必须至少具有指定的权限。
查找所有者可写的文件
现在,我们将使用“ /
”查找其所有者,组或其他人可写的文件。
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文件,然后将其权限设置为755
(rwxr-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
,我们运行
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.tx
t文件并将其复制到~/tmp/images
目录中。
find -iname file22.txt -exec cp {} ~/tmp/images ;
查找一种类型的文件并将其复制到目录
要jpg
在当前目录中查找带有扩展名的图像之类的文件并将其复制到其他位置(例如images文件夹),请使用;
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
文件;
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
用另一部分如bak
,pdf
或其他任何要删除。
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
find . -type d -name dir22 -exec rm -rf {} ;
确保您匹配目录名称大小写或使用该-iname
选项。
find . -type d -iname Dir22 -exec rm -rf {} ;
同时删除Dir22
和dir22
要在删除之前进行确认,请使用-i选项。
代码语言:javascript复制find . -type d -iname Dir22 -exec rm -rf -i {} ;
输出 rm:删除目录'./Dir22'?ñ RM:删除目录” ./dir22' ?ÿ
在我们的例子中,我们输入n
了目录Dir22
,不会被删除,y
为dir22
将予删除。
查找和删除空文件
您可以使用以下任何命令来查找空文件并自动将其删除。
代码语言:javascript复制find ./ -type f -size 0 -exec rm -f {} ;
或 查找./ -type f -size 0 | xargs rm -f 或 find ./ -type f -size 0 –删除
查找和删除空目录
要删除空目录,我们将使用该d
选项。
find ./ -type d -empty -exec rmdir {} ;
另一种选择是使用删除而不是删除。
代码语言:javascript复制find ./ -type d -empty -delete
请注意,从计算机中删除系统文件或重要文件可能会损坏操作系统或应用程序或导致重要数据丢失。
为避免意外删除,最佳做法是使用非root用户帐户。另外,请确保删除了无用的正确文件,并已备份所有数据文件,以防万一。