find在Linux系统中和其它工具,如sed、awk、grep等结合起来用,非常有用。
1、列出系统中所有属于root用户的“set uid”文件
#find / -perm 4755 –uid 0 –type f –print
2、用inode号查找文件
#find / -inum 1877432 //从根目录开始查找inode号为1877432的文件
3、对查找到的每个文件执行某个命令
#find . -name "*.c" -exec wc -l '{}' ; //对找到的每个文件执行wc -l命令统计行数
#find . -name "*.srt" -execdir cp '{}' /tmp ; //拷贝当前目录包括子目录中的所有srt文件到/tmp目录下
或
#find . -name "*.srt" -execdir cp '{}' /tmp ';'
或
#find . -name "*.srt" -execdir cp {} /tmp ;
相当于
#cp file1 /tmp;cp file2 /tmp;...
4、对查找到的所有文件执行某个命令
#find . -name "*.c" -exec wc -l '{}' + //对查找到的所有文件执行wc -l命令 ,因而会打印总数,等于是把所有找到的文件作为一个字符串替换 {},然后执行命令
进一步的解释:
1.'{}'用来替换find查找的每个结果,需要用或单引号防止shell解释;
2. ; 也需要或单引号防止shell解释
3.+最后构建的命令行参数形式类似于xargs
5、使用通配符/正则表达式查找文件
#find . -name "*.c" //通配符方式
#find . -regex ".*[.]c" //正则表达式
6、多条件组合查找(-a,-o)
#find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h //-o是or的意思
#find /home/cb/mp3 -name *.mp3 -o -name *.wav -o -name *.ape -o -name *.wma >/home/cb/mp3/mplayer.lst
7、按文件尺寸查找
#find ~/software -size +5000k //找出software目录下尺寸大于5000k的文件
进一步解释:
-size:凡是+,就是>,-则是<
8、按修改时间查找
#find /home -mmin +60 //找出home目录下最近60分钟之前(1小时以前)有变动的文件或目录
#find /home -mtime -2 //找出home目录下最近2天之内(48小时以内)有变动的文件或目录
进一步解释:
-mmin,-mtime:凡是+号,就是xxx分钟(或天)之前;凡是-号,则是xxx分钟(或天)之内
9、防止搜索其它分区
#find / -xdev -name *.mp3 //-xdev用来防止搜索其它分区。
10、防止搜索子目录
#find ./ -maxdepth 1 -name "*.ass" -exec sh -c "sed 's/N.*$//g' '{}' >./cn/'{}'" ;
11、批量文件编码转换
PROJECT_DIR=.
BUILD_DIR=./build/java
#find $(PROJECT_DIR)/config -name '*.sql' -type f -exec sh -c "iconv -f utf8 -t gb18030 '{}' | unix2dos > $(BUILD_DIR)/'{}'" ;
上述用法在跨平台的mysql数据库应用中有用。
=-=-=-=-=
Powered by Blogilo