JSRUN 用代码说话

find 命令-搜寻硬盘查询文件名称

编辑教程

find 命令

用于在文件树中查找文件,并作出相应的处理。

命令格式:

find pathname \-options \[-print  \-exec  \-ok ...\]

命令参数:

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

命令选项:

选项 作用
-name 按照文件名查找文件
-perm 按文件权限查找文件
-user 按文件属主查找文件
-group 按照文件所属的组来查找文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件
d - 目录
c - 字符设备文件
l - 符号链接文件
p - 管道文件
f - 普通文件
-size n :[c] 查找文件长度为n块文件,带有c时表文件字节大小
-amin n 查找系统中最后N分钟访问的文件
-atime n 查找系统中最后n*24小时访问的文件
-cmin n 查找系统中最后N分钟被改变文件状态的文件
-ctime n 查找系统中最后n*24小时被改变文件状态的文件
-mmin n 查找系统中最后N分钟被改变文件数据的文件
-mtime n 查找系统中最后n*24小时被改变文件数据的文件
-maxdepth n 最大查找目录深度
-prune 选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略
-newer 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项

(用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。 )

实例:

查找 48 小时内修改过的文件

find \-atime \-2

在当前目录查找 以 .log 结尾的文件。 . 代表当前目录

find ./  \-name '\*.log'

查找 /opt 目录下 权限为 777 的文件

find /opt \-perm 777

查找大于 1K 的文件

find \-size +1000c

查找等于 1000 字符的文件

find \-size 1000c

-exec 参数后面跟的是 command 命令,它的终止是以 ; 为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{} 花括号代表前面find查找出来的文件名。

实例:

在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒)

find .  \-type f \-mtime +10  \-exec rm \-f {} \\;

当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 按y键删除文件,按n键不删除

find .  \-name '\*.log' mtime +5  \-ok \-exec rm {} \\;

当前目录下查找文件名以 passwd 开头,内容包含 "pkg" 字符的文件

find .  \-f \-name 'passwd\*'  \-exec grep "pkg"  {} \\;

用 exec 选项执行 cp 命令

find .  \-name '\*.log'  \-exec cp {} test3 \\;

-xargs find 命令把匹配到的文件传递给 xargs 命令,而 xargs 命令每次只获取一部分文件而不是全部,不像 -exec 选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

实例:

查找当前目录下每个普通文件,然后使用 xargs 来判断文件类型

find .  \-type f \-print  | xargs file

查找当前目录下所有以 js 结尾的并且其中包含 'editor' 字符的普通文件

find .  \-type f \-name "\*.js"  \-exec grep \-lF 'ueditor'  {} \\;
find \-type f \-name '\*.js'  | xargs grep \-lF 'editor'

利用 xargs 执行 mv 命令

find .  \-name "\*.log"  | xargs \-i mv {} test4

用 grep 命令在当前目录下的所有普通文件中搜索 hostnames 这个词,并标出所在行:

find .  \-name \\\*(转义)  \-type f \-print  | xargs grep \-n 'hostnames'

查找当前目录中以一个小写字母开头,最后是 4 到 9 加上 .log 结束的文件:

find .  \-name '\[a-z\]\*\[4-9\].log'  \-print

在 test 目录查找不在 test4 子目录查找

find test \-path 'test/test4'  \-prune \-o \-print

实例:查找更改时间比文件 log2012.log新但比文件 log2017.log 旧的文件

find \-newer log2012.log !  \-newer log2017.log

使用 depth 选项

depth 选项可以使 find 命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。

实例:find 命令从文件系统的根目录开始,查找一个名为 CON.FILE 的文件。 它将首先匹配所有的文件然后再进入子目录中查找

find /  \-name "CON.FILE"  \-depth \-print
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟