使用 find 命令在 Linux 上查找文件和目录

参考自:opensource.com/article/21/9/linux-find-command
不管我决心如何组织文件,似乎总有无法找到文件的时候。有时是因为我不记得最初的文件名,其他时候,我知道名字,但我不记得在哪里保存它了。甚至有时我需要一个我最初就没有创建的文件。但是,无论遇到什么困难,我知道在 POSIX 系统 上,总是有 find 命令可以帮助我。
按名称查找文件
你可以借助正则表达式使用完整或部分的文件名来定位文件。find 命令需要你给出想搜索的目录;指定搜索属性选项,例如,-name 用于指定区分大小写的文件名;然后是搜索字符串。默认情况下,搜索字符串按字面意思处理:除非你使用正则表达式语法,否则 find 命令搜索的文件名正是你在引号之间输入的字符串。
假设你的 Documents 目录包含四个文件:Foo、foo、foobar.txt 和 foo.xml。以下是对 foo 的字面搜索:
$ find ~ -name "foo"
/home/tux/Documents/examples/foo
你可以使用 -iname 选项使其不区分大小写来扩大搜索范围:
$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
通配符
你可以使用基本的 shell 通配符来扩展搜索。例如,* 表示任意数量的字符:
$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
? 表示单个字符:
$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
这不是正则表达式语法,因此 . 在示例中只表示字母“点”。
正则表达式
你还可以使用正则表达式。与 -iname 和 -name 一样,也有区分大小写和不区分大小写的选项。但不一样的是,-regex 和 -iregex 搜索应用于整个路径,而不仅仅是文件名。这意味着,如果你搜索 foo,你不会得到任何结果,因为 foo 与 /home/tux/Documents/foo 不匹配。相反,你必须要么搜索整个路径,要么在字符串的开头使用通配符:
$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
查找近一周修改过的文件
要查找近一周修改的文件,使用 -mtime 选项以及过去的天数(负数):
$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
查找近几天修改的文件
你可以结合使用 -mtime 选项来查找近几天范围内修改的文件。对于第一个 -mtime 参数,表示上一次修改文件的最近天数。第二个参数表示最大天数。例如,搜索修改时间超过 1 天但不超过 7 天的文件:
$ find ~ -mtime +1 -mtime -7
按文件类型限制搜索
指定查找文件的类型来优化 find 的结果是很常见的。如果你不确定要查找的内容,则不应该使用此选项。但如果你知道要查找的是文件而不是目录,或者是目录而不是文件,那么这可能是一个很好的过滤器。选项是 -type,它的参数是代表不同类型数据的字母代码。最常见的是:
d - 目录
f - 文件
l - 链接文件
s - 套接字
p - 命名管道(用于 FIFO)
b - 块设备(通常是硬盘)
下面是一些例子:
$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1
调整范围
find 命令默认是递归的,这意味着它会在指定的目录中层层搜索结果。这在大型文件系统中可能会变得不堪重负,但你可以使用 -maxdepth 选项来控制搜索深度:
$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15
也可以使用 -mindepth 设置最小递归深度:
$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255
本站仅为分享信息,绝对不是推荐,所有内容均仅代表个人观点,读者购买风险自担。如果你非要把风险推苏苏头上,不要这么残忍,好吗?
本站保证在法律范围内您的个人信息不经由本站透露给任何第三方。
所有网络产品均无法保证在中国任何地区,任何时间,任何宽带均有相同的访问体验,那种号称某机房绝不抽风的不是骗子就是呵呵.
任何IDC都有倒闭和跑路的可能,备份永远是最佳选择,服务器也是机器,不勤备份是对自己极不负责的表现.
加入群1:569839985
欢迎IDC提交优惠信息或者测试样机,提交信息请Eamil至admin#138vps.com,苏苏不保证一定会进行发布。但请IDC留意以下内容:
无官方正式首页、无可用联络方式暂不发布;
曾经有过倒闭和跑路经历者重开不到6个月不做发布;
从本日起(2016-07-18)不接受任何形式的免费赞助和VPS馈赠,不接受任何评测报告的投稿,不接受任何付费发布和付费删除评论,所有IDC若有必要提交测试样机,请在7日后自行删除。