find指令的使用
一 基本操作
Find是一个非常有效的工具,它可以遍历当前目录甚至于整个文件系统来查找某些文件或目录。
基本指令格式: find pathname -options[-print -exec -ok],操作知识参考以下一些链接:
1. Shell编程--第2章使用find和xargs [推荐比较全面]
2.find与xargs用法简单示例
3.find用法小结
4.find命令使用经验
5.find命令用法
6. 15条Find命令技巧
二 使用经历
有过几次使用find的经历让我对find指令很是重视,find用好了确实可以解决很多问题。
1 批量修改文件格式
Ubuntu下有的时候会出现复制文件的时候丢失执行权限,有的本该是可执行的文件拷贝移动后会变成644,没有了可执行的权限,这对有的需要调用Java和Shell脚本的地方带来了问题,因为644的Java可执行程序时不执行的,使用./调用的shell脚本也不执行。所以为了解决这个问题,我写了这个:
#!/bin/sh
#批量修改文件权限
TMPPATH="/root/tmp/mode_change.txt"#需要检查并修改属性的文件名存到这个文件
find/ -name "*.sh">$TMPPATH#所有的shell脚本
find/ -name "*.jar">>$TMPPATH#所有的java程序
find/root/xtest/test_sh/ -type f>>$TMPPATH#某个目录下的没有.sh后缀的shell脚本
whileread file#读取文件列表的每一行
do
chmod 777 $file#更改属性为777
done<$TMPPATH
解决方法:这是一种效率比较低的方法,因为要不止一次遍历整个文件系统的文件将满足条件的文件路径写到文件里然后再执行修改权限的指令,但是考虑到并不是经常要使用这个脚本,所以单次的代价还是可以接受的。
2 查找文件并删除
因为之前有任务是按关键词生成目录存储文件的,因此当需要在文件系统里删除路径包含某个关键词的文件和文件夹时,可以考虑使用find来解决
find/data -name "*keyword*"| xargs rm
这个指令时可以执行但是也是费时费力,单次使用还可以,如果要多次执行类似的操作会占用大量CPU资源很影响机器的处理速度。
对于这个需求,网上也有人给出这样的方法
find / -name "*.keyword* " -exec rm -f {} \;
差不多是一个意思。