神兵利刃: Linux shell 之 find 命令,看完就会

315 阅读6分钟

“这是我参与更文挑战的第20天,活动详情查看: 更文挑战

Linux 查找命令是Linux系统中最重要和最常用的命令之一。查找用于根据与参数匹配的文件指定的条件来搜索和查找文件和目录列表的命令。查找可以在各种条件下使用,您可以通过权限,用户,组,文件类型,日期,大小等可能的条件查找文件。

它也是用法比较复杂的一个命令之一。

用法

其用法如下:

·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

各个含义如下:

  • path: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
  • -print:find命令将匹配的文件输出到标准输出。
  • -exec:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } ;,注意{ }和\;之间的空格。
  • -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
  • option: 各类控制参数

其控制参数有如下常见的几种

-name   filename             #查找名为filename的文件
-perm                        #按执行权限来查找
-user    username             #按文件属主来查找
-group groupname            #按组来查找
-mtime   -n +n                #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n               #按文件访问时间来查GIN: 0px">
-ctime    -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2              #找文件,-n指n天以内,+n指n天以前 
-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                      #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2               #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                     #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                %;      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                        #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                       #忽略某个目录

示例

基本查找命令

1.在当前目录,查找名为 test.js 的文件

find test.js

2.在主目录下寻找文件

在 /home 目录下寻找名为 test.js 的所有文件

find /home -name test.js

3.忽略文件名大小写寻找文件

在 /home 目录下寻找名为 test.js 的所有文件,忽略大小写,'TesT.js' 也会匹配

find /home -iname test.js
  1. 根据名称查找目录

在当前目录下,寻找名为 test 的目录。 其中 . 代表当前目录,/ 代表根目录, ~ 代表主目录

find . -type d -name test
  1. 使用名称寻找 js 文件

在当前目录下,寻找名为 test.js 的 文件

find . -type f -name test.js
  1. 查找目录下的所有 js 文件

当前目录下所有 js 类型的文件

find . -type f -name "*.js"
  1. 查找文件并删除

在当前目录下查找到所有 test.js 和 文本 txt ,并删除

find . -type f -name "test.js" -exec rm -f {} \;
find . -type -f -name "*.txt" -exec rm -f {} \;
  1. 查找到所有空文件
find . -type f -empty
  1. 查找到所有空目录
find . -type d -empty

根据权限查找文件

  1. 权限为777的所有文件
find . -type f -perm 777 
  1. 查找不是777权限的所有文件
find . -type f ! -perm 777
  1. 查找到所有777的文件,并将权限修改为 644
find . -type f -perm 777 -exec chmod 644 {} \;
  1. 查找所有隐藏文件
find . -type f -name ".*"

根据所有者和组查找文件

  1. 基于某个用户查找文件

查找当前目录下 root 用户所拥有的名为 test.js 的文件

find . -user root -name test.js
  1. 查找某个用户的所有文件

在当前目录下查找属于 moke 的所有文件

find . -user moke 
  1. 查找某个用户组拥有的所有文件

在当前目录下查找 staff 用户组所拥有的所有文件

find . -group staff

根据日期和时间查找文件和目录

  1. 当前目录寻找最后一天内修改过的文件
find . -mtime -1
  1. 主目录寻找最近50~100d内被修改过的文件
find ~ -mtime +50 -mtime -100
  1. 根目录查找最近一个小时内更改过的所有文件
find / -cmin -60

根据文件大小查找文件和目录

  1. 当前目录找到所有50MB的文件
find . -size 50M
  1. 当前目录寻找大于50M,小于100M的所有文件
find . size +50M -size -100M
  1. 主目录查找超过10M 的所有mp3文件,并删除
find ~ -type f -name "*.mp3" -size +10M -exec rm {} \;

替换工具

因为 find 命令使用比较复杂,所以也有一些替代的工具。

其他文章

参考致谢