Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49476
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-19 16:55
个人简介

哈哈

文章分类
文章存档

2014年(5)

我的朋友

分类: LINUX

2014-05-27 20:35:00

1.Find通用格式
find path options express
最常用的就是这句了:
    find ./ -name "searString"
如果要不区分大小写就这样写:
    find ./ -iname "searString"

2.Find后接Type的文件类型
如果参数是  -type, 后面的类型有以下几种:
b
块设备文件
c
字符设备文件
d
目录文件
f
普通文件
l
链接文件
p
管道文件
s
Socket套接字文件

3.Find同时指定多个参数
比如:
    find ./ -type f -name "*.JPG" -size +1M
一般使用的参数:
    
-cmin n 匹配文件内容或属性在n分钟之前修改过的文件.如果修改时间比n分钟大,用+n,如果在n分钟以内被修改,用-n.
-cnewer file 匹配文件内容或属性比指定的文件file新的文件.
-ctime n 匹配文件内容或属性在n天之前修改过的文件.
-empty 匹配内容为空的文件或路径.
-group name 匹配文件所属的组为指定name的文件,name可以是组名,也可以是组ID.
-iname pattern 与-name相同,但不区分大小写
-regex pattern 用正则表达式匹配文件名.匹配过程包含当前路径符号.比如, 要匹配文件名为 './fubar3', 则表达式为 '.*bar.' or '.*b.*3', 不能是'f.*r3'.默认的正则表达式规则为Emacs正则表达式, 但可以通过 -regextype 参数修改.
-iregex pattern 与-regex相同,但不区分大小写.
-inum n 匹配inode数值为n的文件.
-mmin n 匹配文件内容在n分钟之前被修改的文件.
-mtime n 匹配文件内容在n天前被修改的文件.
-name pattern 匹配文件名与 pattern相同的文件,pattern可以包含通配符.
-newer file 匹配文件内容比指定文件file新的文件.
-nouser 匹配没有一个有效用户的文件.对于被删除用户的残留文件和恶意的文件十分有用.
-nogroup 匹配没有一个有效组用户的文件.
-perm mode 匹配文件的读写执行权限与mode相同的文件.
-samefile name 匹配和文件名name拥有相同 inode的文件.
-size n 匹配文件大小为n(k,M,G)的文件,默认单位为k.
-type c 匹配文件类型为c的文件.
-user name 匹配文件所属用户为name的文件,name可以是用户名,也可以是用户ID.
-maxdepth levels 搜索时目录层次最大为levels. -maxdepth 0表示命令行所在层次,-maxdepth 1表示当前目录下的层次,对于只搜索特定目录层次,比如当前目录下时,此参数很有用.
-mindepth levels 与-maxdepth 类似,但指定的是最小的目录层次.

4.匹配时对参数组合
find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)
用()可以对参数时行分组,注意()要转义

-and
-or
-not 非,此选项也可以贝 ! 来实现
( )
分组

!的用法如下:
    find ./ -type f ! -regex ".*html$"

5.对于搜索出来的文件进行操作
    find path option expression -exec command {} \;
比如:
    find ./ -type f -name 'foo*' -exec rm -f {} \;
注意分号是命令的一部分,不是命令结尾标志.

6.解决文件名中带空格的问题
Find命令与Xargs同时使用时,如果文件名中带有空格会有异常,比如:

点击(此处)折叠或打开

  1. $ find ./ -type f -print | xargs ls -l
  2. ls: cannot access ./this: No such file or directory
  3. ls: cannot access is: No such file or directory
  4. -rwxr-xr-x 1 root root 393 May 23 10:38 ./readfile2.py
  5. -rwxr-xr-x 1 root root 345 May 23 10:57 ./readfile3.py
  6. -rwxrwxr-x 1 lhn lhn 508 May 23 09:40 ./readfile.py
  7. -rwxrw-r-- 1 lhn lhn 500 May 27 19:25 ./scanDir.py
  8. -rwxrwxr-x 1 lhn lhn 985 May 26 13:19 ./sql.py
  9. -rwxrw-r-- 1 lhn lhn 205 May 27 19:31 ./str.py
对于这种情况可以使用 -print0参数,它可以在文件名后面加上null字符,解析时也用相应的方式

点击(此处)折叠或打开

  1. $ find ./ -type f -print0 | xargs --null ls -l
  2. -rwxr-xr-x 1 root root 393 May 23 10:38 ./readfile2.py
  3. -rwxr-xr-x 1 root root 345 May 23 10:57 ./readfile3.py
  4. -rwxrwxr-x 1 lhn lhn 508 May 23 09:40 ./readfile.py
  5. -rwxrw-r-- 1 lhn lhn 500 May 27 19:25 ./scanDir.py
  6. -rwxrwxr-x 1 lhn lhn 985 May 26 13:19 ./sql.py
  7. -rwxrw-r-- 1 lhn lhn 205 May 27 19:31 ./str.py
  8. -rw-rw-r-- 1 lhn lhn 0 May 28 07:54 ./this is

对于 for file in $(find ./ -iname "*"); do file "$file"; done 这种通常使用的循环中如果文件名里面有空格字符,
比如:

点击(此处)折叠或打开

  1. $ for file in $(find ./ -iname "*"); do file "$file"; done
  2. ./: directory
  3. ./sql.py: a python script, ASCII text executable
  4. ./this: ERROR: cannot open `./this' (No such file or directory)
  5. is: ERROR: cannot open `is' (No such file or directory)
  6. ./readfile2.py: a python script, ASCII text executable
  7. ./readfile.py: a python script, ASCII text executable
  8. ./scanDir.py: a python script, ASCII text executable
  9. ./tmp: directory
  10. ./str.py: a python script, ASCII text executable
  11. ./readfile3.py: a python script, ASCII text executable
上述的方法无法奏效,需要改变分隔符
$ (IFS=$'\n';for file in $(find ./ -iname "*"); do file "$file"; done)
括号是必需的,表示括号里面的语句在一个子Shell中,这样IFS的改变不会影响整个终端
结果如下:

点击(此处)折叠或打开

  1. $ (IFS=$'\n';for file in $(find ./ -iname "*"); do file "$file"; done)
  2. ./: directory
  3. ./sql.py: a python script, ASCII text executable
  4. ./this is: empty
  5. ./readfile2.py: a python script, ASCII text executable
  6. ./readfile.py: a python script, ASCII text executable
  7. ./scanDir.py: a python script, ASCII text executable
  8. ./tmp: directory
  9. ./str.py: a python script, ASCII text executable
  10. ./readfile3.py: a python script, ASCII text executable

个人积累的Find命令使用方式就这么多了,不过一般情况而言上面所述已经足够使用

阅读(2127) | 评论(0) | 转发(0) |
0

上一篇:Ubuntu 下配置 Vim 常用插件(二)

下一篇:没有了

给主人留下些什么吧!~~