前言
在《Linux中的文件搜索技巧》一文中,我们已经知道了文件搜索的基本方法。今天,我们介绍一些使用find命令的高级技巧。它可以满足我们一些更复杂的需求。
查找空文件或空目录
有时需要清理一些空文件或文件夹。是时候先找到他们了。
1.查找空文件
我们使用前面介绍的大小参数,例如:
找到。/-大小0#在当前目录中找到大小为0的文件
。/size_0_file
当然,您也可以使用-empty参数,例如:
Find- typef -empty #-typef表示您正在查找文件
。/size_0_file
2.找到空目录
要找到空目录,只需使用-empty参数。例如:
find-type-empty
。/test3
。/ find/test3
。/ find/test2
。/test2
要找出这些空文件或文件夹,我们通常要进行处理,最常见的操作就是删除。怎么删除?我们以后再谈。
搜索时排除文件或目录搜索时排除文件
例如,当我们按名称查找某一类型的文件但不想找到。日志文件,我们可以使用它!逻辑运算符搜索,例如:
找到。/ -name "*test* "!-名称" *。日志“#”排除。日志文件
。/ find/test.sh
。/ find/test.
从查找中排除目录
当我们搜索一些文件时,我们可能已经知道某个目录存在,但我们不想浪费时间再次搜索。我们可以使用-prune参数和-path参数,例如:
找到。路径。/test -prune -o -name "*。txt "
在这里查找txt文件,但是排除测试目录中的txt文件。但是,请注意。/test不能写成。/test/,否则结果会不正确。测试时发现。/test仍会出现在搜索结果中。此外,-prune不应与-depth(-delete)一起使用,否则-prune将不起作用。
如果需要排除多个目录怎么办?
找到。/ ( - path "。/test"-o - path "。/home") -prune -o -name "*。txt "
注意这里有空前后(和)。它告诉shell后面的字符不要被解释,并让find命令自己解释它的功能。
当然排除目录还是可以用的!逻辑符号。例如:
找到。/-名称" *。txt "!-路径”。/test "
对找到的文件执行命令操作
找到文件后,我们可能需要对其进行操作,比如删除、移动等等。我们可以用xargs。例如:
查找-名称" *。找到。日志文件,删除它
find-name " * test“| xargschmod 755 #将查找文件的权限修改为755
find-name " * test“| xargsgrp”hello " # "查找包含hello字符串的测试文件
Xargs后面是要执行的命令。这只是一个简单的例子。
我们也可以使用-exec参数。例如:
找到。/-name " * txt "-exec RM-f { };#找到后删除
找到。/-name " * txt "-execp { }。/test;#找到它并将其复制到测试目录
这里的{}指的是找到的内容。;作为命令参数结束的标志,这是必要的。边肖提醒我,小心删除,都是眼泪。Rm可以用-i参数交互删除,即需要查询。
我们还可以使用-ok参数,它与-exec的不同之处在于,它询问用户并适合删除:
找到。/-名称" *。log "-ok ls-al { };
& lt限位开关(Limit Switch)...。/locate/locate。log>。?
删除找到的文件
除了使用xargs和exec删除文件,还可以使用-delete参数。例如:
找到。/-名称" *。日志"-删除#删除带有日志后缀的文件
多条件组合搜索
事实上,我们已经看到了条件组合的使用。常用的条件组合参数有-a(and),-o(or),!(不是).让我们看几个例子:
例1。查找公共文件和符号链接文件:
找到。/-typef -o-typel #查找普通文件和符号链接文件
例2。在当前目录中查找包和gz包:
找到。/-名称" *。"-o -name "*。gz "
例三。查找名为test的符号链接文件:
找到。/-名称" *test"-a - typel
例4。查找日志文件以外的文件:
找到。/ !-名称" *。日志"
以上例子简单介绍了条件的组合使用。丰富的用法可以自己探索。
查找比文件新或旧的文件
环境中的日志文件太多。在某个时间之前想删除文件怎么办?
以下参数可用:
newer 修改时间更新的anewer 访问时间更新的ctime 修改时间更新的,包括属性的修改find./ ! -newer 1. log|xargs ls -al #列出比 1. log更旧的文件找到。/-较新的1.log|xargs ls -al #列出了比1.log新的文件
这里我只是列举,而不是删除。如需删除,请参考上述通过删除找到的文件。如果要查找比文件1新、比文件2旧的文件,只需使用组合条件。
搜索结果以特定格式输出
以前的搜索结果大多只列出路径和文件名。如何获取更多信息?当然,我们可以结合ls -al使用xargs或exec来获得更多关于文件的信息,但是我们有更好的方法。例如,输出找到的日志文件的文件名、访问时间、权限信息、大小等信息:
找到。/-名称" *。log"- printf"%f %a %M %s "
定位日志星期六2409年11月24日:44:22。19902018-rw-rw-r-69
测试日志Sat 1515:09:33 . 990592102018-rw-rw-r-0
常见的格式控制输出如下:
%f 文件名%a 访问时间%c 修改时间%M 权限信息%m 权限位信息%s 文件大小,单位为字节%d 文件所在目录层级%u 文件所属用户%p 带相对路径的完整名%y 文件类型…还有很多,这里不一一列举。感兴趣的读者可以查看find的帮助手册。
总结
find命令的用法非常丰富,本文仅列举一些实用的find命令高级用法。如果有本文没有反映的特殊场景,也欢迎读者在本文末尾留言。
注意:
-prune参数与-depth或-delete参数一起使用时,-prune将失效。后面的字符串表明shell不解释该字符串,留给命令本身去解释处理。基本使用可参考《Linux中的文件查找技巧》【结束】
抛弃Windows,拥抱Linux之后,我有了这些新发现!
2018年Python开发者调查报告发布
“我不想966,老板建议离婚”
●
●
●
小费
1.《find的用法 find命令高级用法》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《find的用法 find命令高级用法》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1044546.html