linux find用法整理

linux find 一个不错的网站http://www.linuxsir.org/main/node/137
find命令用于查找文件和目录,任何位于参数之前的字符串都将被视为欲查找的目录。

find 可以指定查找条件如名称,类型,时间,文件大小,权限和所有者查找,针对多个条件进行与或非的逻辑运算。
我们可以控制find的查找的行为,还可以和其他命令组合使用。

find
find .
find . -print
三者等效, 查找当前目录下所有的文件和目录(递归子目录),以每行一个文件或者目录的形式列举出,不包含隐藏文件

find lib opt bin
同上,查找指定的多个目录(lib/opt/bin)

指定查找条件

1) 按名称查找

find . -name readme.txt
查找当前目录下(递归子目录)的所有名为readme.txt的文件

find . -name \*.txt
find . -name "*.txt"
查找当前目录下(递归子目录)的所有名称以.txt结尾的文件,注意*号的写法,需要前面加\或者放到双引号中

find . -iname\*.txt
默认find是区分大小写的,如果不想区分大小写,请使用-iname替代-name,如上则"abc.TXT"将被查找到

2) 按类型查找

find . -type d
查找当前目录下(递归子目录)的所有目录

find . -type f
查找当前目录下(递归子目录)的所有文件

find . -type l
查找当前目录下(递归子目录)的所有符号链接

3) 按时间查找

1. 以小时为单位的时间
find 命令三个选项用于按照时间查找,单位都是小时:

mtime — 文件内容上次修改时间
atime — 文件被读取或访问的时间
ctime — 文件状态变化时间

这三个选项都需要配置一个n值使用,可以是-n / n / +n:
-n 小于 n

n 正好与 n 相等
+n 大于 n

find . -mtime -1
查找当前目录下(递归子目录)的所有1小时内修改的文件和目录
find . -mtime +1
查找当前目录下(递归子目录)的所有修改时间超过1小时的文件和目录
find . -mtime 1
查找当前目录下(递归子目录)的所有恰好在1小时前修改的文件和目录

2. 以分钟为单位的时间
用法和*time类似,mmin、amin和cmin的不同在于单位时间是分钟,用于查找在不到1小时的时间内变化了的文件和目录

find . -mmin -10
查找当前目录下(递归子目录)的所有10分钟内修改的文件和目录

find . -mmin +20
查找当前目录下(递归子目录)的所有20分钟外1小时内修改的文件和目录

3. 与特定的文件比较
-newer,-anewer和-cnewer选项用于查找与特定的文件比较的已修改或访问过的文件,类似mtime,atime和ctime
-newer 指内容最近被修改的文件
-anewer 指最近被读取过的文件
-cnewer 指状态最近发生变化的文件

find . -newer a.txt
查找当前目录下(递归子目录)的所有修改时间在a.txt之后(所以文件更新)的文件和目录


4) 按文件大小查找

1. -size 选项用于查找满足指定的大小条件的文件(注意不查找目录), +表示大于, -表示小于,没有+1表示正好等于。文件大小的单位可以是字节(用c表示), kb(用k表示)。

find . -size -100c
查找当前目录下(递归子目录)的所有文件大小小于100字节的文件

find . -size +100k
查找当前目录下(递归子目录)的所有文件大小大于100k的文件

find . -size 0
查找当前目录下(递归子目录)的所有文件大小为0的文件

2. -empty 查找空文件和空文件夹, 和-size 0不同的在于-size 0 只查找空文件,或者说-empty -type f等同于-size 0 :

find . -empty
查找当前目录下(递归子目录)的所有文件大小为0的文件和空文件夹

find . -empty -type f
查找当前目录下(递归子目录)的所有文件大小为0的文件

find . -empty -type d
查找当前目录下(递归子目录)的所有空目录


5) 按权限和所有者查找

find . -perm 777
查找当前目录下(递归子目录)的所有权限为777的文件和目录
find ./ -perm 644 -type f

find . -perm-u=rwx
查找当前目录下(递归子目录)的所有者用户权限为rwx的文件和目录

find . -perm-ug=x
查找当前目录下(递归子目录)的所有者和所属组权限为x的文件和目录

find . -perm -o=x
查找当前目录下(递归子目录)的其他人权限为x的文件和目录

find . -userdaemon
查找当前目录下(递归子目录)的用户权限属于sky的文件和目录

find . -groupusers
查找当前目录下(递归子目录)的所属组为users的文件和目录

(2) 查找条件的逻辑运算

1. 逻辑与
find . -name "*.java" -size -100k -mmin -10
find . -name "*.java" -a -size +100k -mmin -10
查找当前目录下(递归子目录)的所有名为*.java并且修改时间在10分钟之内的文件,-a是默认选项

2. 逻辑或
find . -name "*.class" -o -name "*.jar"
查找当前目录下(递归子目录)的所有名为*.class或者*.jar的文件和目录
find ./ -maxdepth 1 -name "test.sh" -o -name "add*.sh" -o -name"*.SH"

3. 逻辑非

find . ! -user sky
查找当前目录下(递归子目录)的所有user不是sky的文件和目录
find . ! -user root

(3) 控制查找的行为

find . -maxdepth 3 -name "*.txt"
查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不超过3层

find . -maxdepth 1 -name "*.txt"
查找当前目录下(不递归子目录,因为maxdepth为1)的所有名为*.txt的文件

find . -mindepth 3 -name "*.txt"
查找当前目录下(递归子目录)的所有名为*.txt的文件,目录深度不低于3层

find . -mindepth 1 -name "*.txt"
查找当前目录下的子目录中(递归子目录)的所有名为*.txt的文件,不包含当前目录

find . -depth -name "*.txt"
查找当前目录下(递归子目录)的所有名为*.txt的文件,每个目录都是先在目录中进行查找,然后才继续查找其子目录

(4) find和其他命令的组合

find . -name "*.jar" -exec ls -l {} \;
find . -name "*.jar" -ls
查找当前目录下(递归子目录)的所有*.jar文件并使用ls -l列出详细信息
]#
find . -name "*.SH" |xargs -n 100 -i grep test {}\;
./test.SH:this istest
grep: ;: 没有那个文件或目录
]#
后面加上\;就可以显示出那在那个文件中包括关注的信息.

find . -name "*.java" -exec grep -H -m 1 HashMap {} \;
查找当前目录下(递归子目录)的所有的含有"HashMap"字样的*.java文件
(grep -H -m1的意思是打印文件名,而且如果文件中有一次匹配就退出,避免多次匹配时为这一个文件打印多行)
#-H, --with-filename Print the filename for eachmatch. 为每次匹配打印文件名.
#-m NUM,--max-count=NUM Stop reading a file after NUM matchinglines.在一个文件中匹配到NUM后就退出.

find . -name "*.sh" -exec mv {} backup \;
查找当前目录下(递归子目录)的所有的*.sh文件并移动到backup目录中


shell中find-prune的用法

注意:
1. find . -path ./dir/dir1如果find使用的是相对路径那么path也要使用相对路径,切记path指定的目录后面不能以/结尾.
2. find / 或者find /dir这种写法,那么-path /dir/dir1,也就是find使用绝对路径那么path也要使用绝对路径.
3.
-prune
使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。


S.1 find /home/bo/ -path/home/bo/web/bo_new -prune
S.2/home/bo/web/bo_new
S.3 find./ \( -path ./web/bo_new -o -path./web/www_bo_com \) -prune -o -type f -a -name"config.php"
因为中间为或 所以当-o前面成立则打印前面后面成立则打印后面. 这是使用了相对路径
S.4 find./ \( -path ./web/bo_new -o -path./web/www_bo_com \) -prune -o -name"config.php"
S.3和S.4打印出来都是一样的结果
find ./ \( -path ./web/bo_new -o -path ./web/www_bo_com \) -prune -o -typef -a -name "config.php" -print
这将不在打印./web/bo_new和./web/www_bo_com这两行.因为最后有了一个-print
find /bo \( -path /bo/web/bo_new -o -path /bo/web/www_bo_com \) -prune -o-type f -a -name "config.php" -print
这是绝对路径

显示除http开头的所有目录或文件,以及名为error的目录或文件之外的所有文件
find . \( -name http* -o-name error \) -prune -o -print

排除文件config.php .svn .jpg.gif生成文件aa 并进行打包.
find/bo/web/bo_new/ \( -name "config.php" -o -name".svn" -o -name "*.jpg" -o -name "*.gif" \) -prune -o -fprint aa-exec tar -rf all.tar {} \;
find/bo/web/bo_new/ \( -name "config.php" -o -name".svn" -o -name "*.jpg" -o -name "*.gif" \) -prune -o -fprint aa-exec tar -rfP all.tar {} \;
以上会出现错误提示 tar:从成员名中删除开头的“/”

不同的是tar -rfP P参数是取绝对路径,不删除'/'
-P,--absolute-names don’t strip leading ‘/’s from file names

-prune 如果prune条件成立就打印-path后面跟的路径. 如S.1 打印结果为S.2
-print 如果find返回结果为true就打印.


find ./ \( -path './udev' -o -path './webarchives' \) -prune -o-type f -name "*.war" -print

means:

if (path == "./udev" || path == "./webarchives") {
prune;
} else if (type == f && name =="*.war") {
print;
}

实例:
find /tmp \( -path '/tmdp/test/0' -o -path '/tmp/test/1' \) -prune-o -name "*.txt" -type f -print
find . \( -path './test/1' -o -path './test/0' \)-prune -o -name '*.txt' -type f -print


find: warning: you have specified the -maxdepth option after anon-option argument -type, but options are not positional(-maxdepth affects tests specified before it as well as thosespecified after it). Please specify optionsbefore other arguments.
-maxdepth 需要在路径之后.

一、

find /tmp -size +4096c -size -1114096c -print -exec rm {}\; -表示小于 +表示大于

find / -size +102400k -fprint file.txt

二、
find ./ -type f -name "*.${filetype}" -${timetype} +${srchtime}-maxdepth 1 -fprint ${gzfilea}.list -exec tar -rvf ${gzfilea}.tar{} \;

# mtime 是文件被修改的时间 (单位为天)
#atime 是文件被访问的时间 (单位为天)
#ctime 是被最后改变的时间 (类似于atime)
#+n 比n大。
#-n 比n小。
# n 恰好是n
#-cminn 文档的状态的改变是在n分钟前。
#-aminn 文档最后一次访问是在n分钟前。
#-fprint file 打印文件完整文件名

#find . -maxdepth 2 -name fred
#假如这个fred文件在./sub1/fred目录中,那么这个命令就会直接定位这个文件,查找很容易成功。
#假如,这个文件在./sub1/sub2/fred目录中,那么这个命令就无法查找到。
#因为前面已经给find命令在目录中最大的查询目录级别为2,只能查找2层目录下的文件。
#这样做的目的就是为了让find命令更加精确的定位文件,如果你已经知道了某个文件大概所在的文件目录级数,
#那么加入-maxdepth n 就很快的能在指定目录中查找成功。

三、
find ./ -maxdepth 1 -type f -name "*bj*" -fprinta.list -exec tar -xzfall.tar.gz {} \;
上面这条命令使用 tar -xzf 会有问题
find ./ -maxdepth 1 -type f -name "bj*" -fprint all.list -exec tar-rf all.tar.gz {} \;
把 tar -xzf 换成 tar -rvf 就OK.
其原因不知道为什么.

四、
find ./ -type f -name "*.log" |xargs -n 50 -i mv{} $dstdir;

find -maxdepth 1 -type f -name"*-1-b_200*" |xargs -n 10 -i tar zxf {} -C/home/jiangbo/zone_source_file/ ;
find -maxdepth 1 -type f -name"*-1-b_200*" |xargs -n 10 -i tar zxf {} -C/home/jiangbo/zone_source_file/ \;如果后面加上了”\“ 就会报错的

#不使用xargs命令会出现,too many arguments .
#find ./ -type f -print | xargs -i mv -f {} ./newdir
# -i 表示 find 传递给xargs的结果 由{}来代替
#ls | xargs -n 10 rm -fr
#ls当然是输出所有的文件名(用空格分割)
#xargs就是将ls的输出,每10个为一组(以空格为分隔符),作为rm -rf的参数
#也就是说将所有文件名10个为一组,由rm -rf删除,这样就不会超过命令行的长度了

find ./ -xdev -type d -maxdepth 1 -fprint $bkchilddir_list;



#tar 参数
#-r, --append #附加到存档结尾
#tar -rvf
#tar -tf all.tar.gz 查看里面文件列表


语法:gzip [选项] 压缩(解压缩)的文件名
各选项的含义:
-c 将输出写到标准输出上,并保留原有文件。
-d 将压缩文件解压。
-l 对每个压缩文件,显示下列字段:
压缩文件的大小
未压缩文件的大小
压缩比
未压缩文件的名字
-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。
-t 测试,检查压缩文件是否完整。
-v 对每一个压缩和解压的文件,显示文件名和压缩比。
-num用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。


ftp


1. -i 当传输多文件时关闭交互式提示
-n不受.netrc文件的影响。(ftp默认为读取.netrc文件中的设定)
-v 显示详细信息
2. << 是使用即时文件重定向输入。
3. END_FTP是即时文件的标志它必须成对出现,以标识即时文件的开始和结尾。
4.p

转自:http://blog.csdn.net/yq495/article/details/7575208

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值