我在csh下使用find的时候,搜索路径写成/path,搜索不到结果,需要写成/path/才行。
1.查找文件
find . -name "a"
2.查找目录
find . -type d -name "a"
查找目录时,最好将 . 换成 ./* ,这样在查找目录的时候不会将 . 也给显示出来。
3.查找除a以外的所有目录
find . -type d ! -name "a"
4.查找除目录以外的所有用文件
find . ! -type d
5.查找文件后拷贝
find . -name "a" | xargs -i cp {} target_path/
6.删除N天前的文件
find . -mtime +{N-1} -delete
这里要注意删除N天前要用N-1,-mtime +1 中的 +1 表示大于 1, 因此至少是 2, 也就是 2 天前被修改过的文件
7.查找递归层数控制
find . -maxdepth 1 ! -type d
这里-maxdepth 1 表示只搜索当前目录下的文件,不搜索子目录下的文件。
8.同ls功能,查找当前目录里的非隐藏文件
find . -maxdepth 1 ! -name ".*" -type d
注意这里的-name ".*" 要写在 -type d前面
9.查找多种后缀类型的文件
find . /( -name "*.sh" -or -name "*.perl" /) -type f
find . -regex ".*/./(sh/|perl/)$"
如果对这里的正则表达式还有什么疑问,可以info emacs Regexps
10.只找名为a,非aa的文件
find . -regex ".*/<a/>"
11.碰到有些文件名中带有空格,在find出来的结果就会断掉,变成两个文件,从而程序出错,这时候我们需要用到0选项,
强制设置find找到的文件名以‘/0’结束。
find . -type f -print0 | xargs -i0 cksum {} > xxx.cat
12.find + tar使用find查找出最近修改过的*.c和*.h文件,然后打包
find . -name '*.[ch]' -mtime -1 | xargs tar czf backup_$(date +%m_%d).tar.gz
13.统计当前目录中所有文件的行数
find . -type f | xargs wc -l
注意:这里有个xargs,如果去掉,则统计的是当前目录的文件数。