性感的shell命令--find

使用格式

find <指定目录> <指定条件> <指定动作>
  - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
  - <指定条件>: 所要搜索的文件的特征。
  - <指定动作>: 对搜索结果进行特定的处理

选项

-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
-daystart:从本日开始计算时间;
-depth:从指定目录下最深层的子目录开始查找;
-expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-false:将find指令的回传值皆设为False;
-fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
-follow:排除符号连接;
-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-help或——help:在线帮助;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
-mount:此参数的效果和指定“-xdev”相同;
-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;
-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-prune:不寻找字符串作为寻找文件或目录的范本样式; -regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true:将find指令的回传值皆设为True;
-typ<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-version或——version:显示版本信息;
-xdev:将范围局限在先行的文件系统中;
-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。

一些关于find的使用

1.在find结果中同时执行两条命令
在find的man page页面中,下面是一次文件查找遍历中使用两条命令的语法举例.
例子:遍历文件系统一次,列出拥有setuid属性的文件和目录,写入/root/suid.txt文件
如果文件大小超过100M,将其记录到/root/big.txt中.
注意: -fprintf的用法以及如何格式化 -fprintf <file> <format>
对比: [-printf] 和 [-exec 再结合 printf]
# find . -type f -name "*.txt" -exec printf "Text file: %s\n" {} \; 
* 多个命令同时执行的格式 \(\),\(\),....
find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
       \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)
2. 错误清理
find /usr /home  /tmp -name "*.jar"
但是,如果您没有相应的权限,您在开始浏览许多系统目录时将生成错误消息。以下是一个示例:
find:  /tmp/orbit-root: Permission denied
您可以通过附加您的搜索字符串来避免混乱的输出,如下所示:
find /usr /home  /tmp -name "*.jar" 2>/dev/null
这会将所有错误消息发送到空文件,因此提供清理器输出。
3. 使用inode编号删除具有特殊符号的文件名
ls
file1.txt file2.txt file?.txt
rm file?.txt # 目标是删除第三个文件,然而实际会删除以上三个文件
# 解决方案 先查看特殊文件的inode编号 然后使用find -inum删除
ls -i1
804178 file1.txt
804179 file2.txt
804180 file?.txt
find -inum 804180 -exec rm {} \;
4. 在同一个命令中使用多个{}
linux手册说命令中只能使用一个*{},不过你可以像下面这样在同一个命令中使用多个{}
# find -name "*.txt" cp {} {}.bkup \;
注意,在同一个命令中使用这个{}是可以的,但是在不同的命令里就不行了,
也就是说,如果你想象下面这样重命名文件是行不通的 
因为第一个{}属于 mv  第二个{}属于 basename
# find -name "*.txt" -exec mv {} `basename {} .htm`.html \;  # 这是行不通的

【模拟使用多个{}实例】
你可以像下面这样写一个shell脚本去模拟上面那个重命名的例子
# mv "$1" "`basename "$1" .htm`.html"
上面的双引号是为了防止文件名中出现的空格,不加的话会有问题。
然后你把这个shell脚本保存为mv.sh,你可以像下面这样使用find命令了
# find -name "*.html" -exec ./mv.sh '{}' \;
所以,任何情况下你在find命令执行中想使用同一个文件名多次的话,先写一个脚本
然后在find中通过-exec执行这个脚本,把文件名参数传递进去就行,这是最简单的办法
5. 查找包含BOM头的文件和清除BOM头命令
查找包含BOM头的文件,命令如下:
grep -r -I -l $'^\xEF\xBB\xBF' ./
\xef\xbb\xbf是UTF8 BOM的16进制表示 
这个命令会把当前目录及所有子目录下的BOM头删除掉。
find . -type f -exec sed -i 's/\xEF\xBB\xBF//' {} \;

一些关于find的文章

Linux Find 命令精通指南

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值