This website requires JavaScript.

find 查找文件

显示目录名

find . -print 使用换行符输出每个文件或目录名
find . -print0 使用空字符'\0'来分割
find . -type f -print0 | xargs -0 ls -l  显示目录/文件名并传递给xargs
find source_code_dir_path -type f -name "*.c" -print0 | xargs -0 wc –l  统计源代码目录中所有c程序文件的行数

文件名模式查找

find /home/slynux -name '*.txt' -print  会搜索所有以.txt结尾的文件或目录 ,可以是通配符或者正则。 注意单引号会阻止扩展,双引号不会。
find . -name '*.php' -exec grep -l 'eval' {} \; 在当前目录中找到所有php文件中包含eval的文件.

忽略大小写

find . -iname "example*" -print

逻辑操作符

-a和-and选项可以执行逻辑与操作,-o和-or选项可以执行逻辑或操作

find . \( -name '*.txt' -o -name '*.pdf' \) -print

限制查找路径

-regex选项和-path类似,不过前置是基于正则表达式来匹配文件。

find /home/users -path '*/slynux/*' -name '*.txt' –print

匹配.py或.sh文件

find . -regex '.*\.(py\|sh\)$'
find . -iregex '.*\(\.py\|\.sh\)$' 忽略大小写

否定参数!

find . ! -name "*.txt" -print 匹配所有不以.txt结尾的文件

限制查找的目录深度

find . -mindepth 2 -maxdepth 5 -name "f*" -print

根据文件类型查找文件

普通文件 f 符号链接 l 目录 d 字符设备 c 块设备 b 套接字 s FIFO P

find ./ -type f -exec grep -H 't_totalpv_dayavg' {} \;

根据文件的时间戳进行搜索

按天

访问时间(-atime):用户最近一次访问文件的时间 修改时间(-mtime):文件内容最后一次被修改的时间 变化时间(-ctime):文件元数据(例如权限或所有权)最后一次改变的时间。

find . -type f -atime -7 -print 打印出在最近7天内被访问过的所有文件
find . -type f -atime 7 -print 打印恰好在7天前被访问过的所有文件。
find . -type f -atime +7 -print 打印出访问时间超过7天的所有文件。

按分

访问时间(-amin): 修改时间(-mmin): 变化时间(-cmin):

find . -type f -amin +7 -print 打印出7分钟之前访问的所有文件。
find . -type f -newer file.txt -print 找出比file.txt修改时间更近的所有文件。

基于文件大小搜索

find . -type f -size +2k 大于2KB的文件
find . -type f -size -2k 小于2KB的文件
find . -type f -size  2k 大小等于2KB的文件

其他单位:

b 块(512字节) C 字节 w 字(2字节) k 千字节(1024字节) M 兆字节(1024K字节) G 吉字节(1024M字节)

根据权限查找

find . -type f -name "*.php" ! -perm 644 –print 查找没有配置好权限的文件
find . -type f -user slynux -print 查找用户slynux拥有的所有文件

利用find执行相应的操作

find . -type f -name "*.swp" -delete 删除找到的.swp文件
find . -type f -user root -exec chown slynux {} \;利用-exec选项后面可以接命令,其中花括号{}代表文件名。注意该命令结尾的\;必须对分号转义,否则shell将其视为find命令的结束,而非chown命令的结束。
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \; 将十天前的文件复制到OLD目录中

为每个匹配到的文件调命令可是不小的开销。可以用加号(+)作为命令结尾。这样find会生成一份包含所有搜索结果的列表,然后将其作为指定命令的参数,一次性执行。

find . -type f -name '*.c' -exec cat {} \;>all_c_files.txt
find . -type f -name '*.c' -exec cat {} > all_c_files.txt \;
fine . -type f -name '*.c' -exec cat {} >all_c_files.txt +
0条评论
avatar