首页 > 编程知识 正文

linux中find的用法(grep用法linux)

时间:2023-05-05 22:08:14 阅读:101446 作者:4874

Linux系统中的find命令在查找文件时非常有用和方便。它可以根据不同的条件查找文件,如权限、所有者、修改日期/时间、文件大小等。在本文中,我们将学习如何使用find命令及其提供的选项来查找文件。

在大多数Linux发行版中,您可以直接使用find命令,而无需任何安装。如果你想在linux系统的命令行中特别高效,那么find是你必须掌握的命令之一。

find命令的基本语法如下:

$ find[路径][选项][表达式]

一、基本用法

1. 列出当前目录和子目录下的所有文件

该命令将列出当前目录和子目录中的所有文件。

$查找。/abc.txt。/subdr。/subdir/how.php。/cool.php

此命令与以下命令具有相同的效果

$查找。

$查找。-打印

00-1010以下命令将在当前目录中找到测试文件夹中的文件,默认情况下将列出所有文件。

$查找。/test。/test。/test/abc.txt。/test/subdr。/test/subdr/how . PHP。/test/cool.php

以下命令用于查找具有指定名称的文件。

$查找。/test -name 'abc.txt '。/test/abc.txt

也可以使用通配符。

$查找。/test -name '*。php '。/test/subdr/how . PHP。/test/cool.php

请注意,所有文件夹都将被递归搜索。因此,这是查找具有指定扩展名的文件的非常强大的方法。

如果我们尝试搜索/folder,即根目录,我们将搜索整个文件系统,包括装载的设备和网络存储设备。所以请谨慎使用。当然,您总是可以通过按Ctrl+c来停止命令。

注意:当指定文件夹时(例如。/test '文件夹),可以忽略末尾的斜杠。但是,如果文件夹是指向另一个位置的符号链接,则必须在末尾写一个斜杠,以使find命令正常工作(find。/test/)。

忽略大小写

查找文件名时忽略大小写通常很有用。要忽略大小写,只需使用iname选项,而不是name选项。

$查找。/test -iname '*。Php '。/test/subdr/how . PHP。/test/cool.php

始终用双引号或单引号将匹配模式(filename参数)括起来,这非常有用。如果你不这样做,有时你可以正常工作,有时你可能会有奇怪的结果。

默认情况下,

2. 查找特殊的目录或路径

find命令递归搜索整个目录树,这非常耗时且耗费资源。幸运的是,目录搜索的深度可以手动指定。比如我们只要找到一两层内的子目录,可以通过maxdepth选项指定。

$查找。/test -maxdepth 2 -name '*。php '。/test/subdr/how . PHP。/test/cool.php

$查找。/test -maxdepth 1 -name *。服务器端编程语言(Professional Hypertext Preprocessor的缩写)。/test/cool.php

在第二个示例中,maxdepth被指定为1,表示最多只搜索一个级别的子目录,即只搜索当前文件夹。

当我们只想搜索当前目录,而不是整个目录树时,这个选项特别有用。

与maxdepth选项类似,还有另一个名为mindepth的选项,顾名思义,它在至少到达第n个子目录之前不会开始搜索文件。

3. 限制目录查找的深度

除了查找符合条件的文件,我们还可以查找所有不符合条件的文件。当我们知道要从搜索中排除哪些文件时,此选项有效。

$查找。/test -not -name '*。php '。/test。/test/abc.txt。/test/subdr

在上面的例子中,我们发现所有文件和文件夹的扩展名都不是php。我们也可以用感叹号!而不是-不是。

找到。/test!-名称' *。php '

00-1010我们可以使用多个搜索条件来指定文件名,同时排除一些文件。

$查找。/test -name 'abc* '!-名称' *。php '。/test/abc.txt。/test/abc

上面的命令查找所有以abc开头且没有。php扩展。这个例子展示了find命令附带的find表达式是多么强大。

或运算符

当我们使用多个搜索条件时,find命令会将它们与and运算符组合在一起,也就是说,只会列出满足所有条件的文件。但是,如果我们需要进行基于或的

运算的查找时,可以加上 -o 开关。

$ find -name '*.php' -o -name '*.txt' ./abc.txt ./subdir/how.php ./abc.php ./cool.php

上面的命令查找所有以 .php 结尾或者以 .txt 结尾的文件。

6. 只查找文件或目录

有时我们只想通过某个名字查找对应的文件或对应的目录,我们可以很容易实现这个要求。

$ find ./test -name abc* ./test/abc.txt ./test/abc 只查找文件 $ find ./test -type f -name "abc*" ./test/abc.txt 只查找目录 $ find ./test -type d -name "abc*" ./test/abc

非常有用而且方便!

7. 同时在多个目录下查找

如果你想要在两个不同的目录内进行查找,命令非常简单。

$ find ./test ./dir2 -type f -name "abc*" ./test/abc.txt ./dir2/abcdefg.txt

检查一下,它确实列出了来自给定的两个目录的文件。

8. 查找隐藏文件

在Linux系统中,隐藏文件的名字以英文的句号开头,即 . 。所以要列出隐藏文件,只需加上简单的文件名过滤条件就行了。

$ find ~ -type f -name ".*"

二、基于文件权限和属性的查找

9. 查找指定权限的文件

通过指定 perm 选项,我们可以查找具有特定权限的文件。下面的示例中查找了所有具有 0664 权限的文件。

$ find . -type f -perm 0664 ./abc.txt ./subdir/how.php ./abc.php ./cool.php

我们可以用这个命令来查找带有错误权限的文件,这些文件可能会产生安全问题。

可以结合 反向查找 来进行权限检查。

$ find . -type f ! -perm 0777 ./abc.txt ./subdir/how.php ./abc.php ./cool.php

10. 查找具有 SGID/SUID 属性的文件

下面的命令查找所有具有 644 权限和 SGID 属性的文件。

# find / -perm 2644

我们同样可以使用 1664 来查找设置了 粘滞位 (sticky bit)的文件。

# find / -perm 1644

perm 选项除了接受数值型参数外,同样接受 chmod 命令中的模式串。在下面的查找中,我们用另一种语法来代替数字。

$ find / -maxdepth 2 -perm /u=s 2>/dev/null /wwdxn/mount /wwdxn/su /wwdxn/ping6 /wwdxn/fusermount /wwdxn/ping /wwdxn/umount /swwdxn/mount.ecryptfs_private

注意:由于权限不足,某些目录会拒接访问。命令中的 2>/dev/null 正是用于清除输出中的错误访问结果。

11. 查找只读文件

$ find /etc -maxdepth 1 -perm /u=r /etc /etc/thunderbird /etc/brltty /etc/dkms /etc/phpmyadmin ... output truncated ...

12. 查找可执行文件

$ find /wwdxn -maxdepth 2 -perm /a=x /wwdxn /wwdxn/preseed_command /wwdxn/mount /wwdxn/zfgrep /wwdxn/tempfile ... output truncated ...

三、基于文件拥有者和用户组的查找

13. 查找属于特定用户的文件

查找当前目录下,属于 bob 的文件。

$ find . -user bob . ./abc.txt ./abc ./subdir ./subdir/how.php ./abc.php

在指定所属用户的同时,我们同样可以指定文件名。

$ find . -user bob -name '*.php'

很容易看出,我们可以通过增加过滤条件来缩小查找文件的范围。

14. 查找属于特定用户组的文件

# find /var/www -group developer

四、基于日期和时间的查找

除了上面介绍的查找条件外,另外一个非常棒的查找条件就是文件的修改和访问时间(日期)。当我们想要找出哪些文件在某段时间内被修改的时候,这个查找条件将会非常方便。我们来看几个例子。

15. 查找过去的第 N 天被修改过的文件

# find / -mtime 50

16. 查找过去的 N 天内被访问过的文件

# find / -atime -50

17. 查找某段时间范围内被修改过内容的文件

# find / -mtime +50 -mtime -100

18. 查找过去的 N 分钟内状态发生改变的文件

$ find /home/bob -cmin -60

19. 查找过去的 1 小时内被修改过内容的文件

# find / -mmin -60

20. 查找过去的 1 小时内被访问过的文件

# find / -amin -60

五、基于文件大小的查找

21. 查找指定大小的文件

$ find / -size 50M

22. 查找大小在一定范围内的文件

$ find / -size +50M -size -100M

23. 查找最大和最小的文件

我们可以将 find 命令与 ls 和 sort命令结合,从而找出最大或最小的文件。

下面的命令使用了 sort 命令的 -r 选项,也就是从大到小降序排列。经过 head 命令的过滤之后,会显示当前目录和子目录下最大的5个文件。命令的执行过程需要一段时间,查找的速度取决于文件的总数。

$ find . -type f -exec ls -s {} ; | sort -n -r | head 5

同样,我们可以去掉 sort 命令的 -r 选项来进行升序排列,从而显示出最小的5个文件。

$ find . -type f -exec ls -s {} ; | sort -n | head 5

24. 查找空文件和空目录

查找空文件:

# find /tmp -type f -empty

查找空目录:

$ find ~/ -type d -empty

非常简单!

六、高级操作

find 命令不仅可以通过特定条件来查找文件,还可以对查找到的文件使用任意linux命令进行操作。下面给出两个例子。

25. 使用 ls 命令列出文件信息

我们使用 find 命令找到文件后,只能看到文件路径。如果想进一步查看文件信息,可以结合 ls 命令来实现。

$ find . -exec ls -ld {} ; drwxrwxr-x 4 enlightened enlightened 4096 Aug 11 19:01 . -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./abc.txt drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:48 ./abc drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:26 ./subdir -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:26 ./subdir/how.php -rw-rw-r-- 1 enlightened enlightened 29 Aug 11 19:13 ./abc.php -rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./cool.php

26. 删除找到的文件

下面的命令会删除 tmp 目录下扩展名为 .txt 的文件。

$ find /tmp -type f -name "*.txt" -exec rm -f {} ;

我们同样可以删除目录,只要把 -type 后面的 f 改为 d ,并且在 rm 命令后面加上 -r 即可。

$ find /tmp -type d -name "dirToRemove" -exec rm -r -f {} ;

原文地址:http://www.codebelief.com/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。