日期:2014-05-16  浏览次数:20788 次

爹地,我找到了!15个极好的Linux find命令示例

原文出处: thegeekstuff???译文出处: oschina - 一刀, 和雨冰风, hylent

前阵子,我们审查了15件实事?find命令的例子(第一部分)。查找命令可以做很多比只是在寻找基于名称的文件?(第2部分)在这篇文章中,让我们来讨论15高级find命令的例子,?包括-根据它访问,修改或改变的时间查找文件,查找文件相比之下,执行操作找到的文件等,?拉梅什纳塔拉詹:这是我的照片中的可爱的小女儿。她很高兴地发现在加州长滩水族馆海狮。

?

基于访问/修改/更改时间查找文件

你可以找到基于以下三个文件的时间属性的文件。

  1. 访问时间的文件。文件访问时,访问时间得到更新。
  2. 的文件的修改时间文件内容修改时,修改时间得到更新。
  3. 更改文件的时间。更改时间时,被更新的inode数据的变化

在下面的例子中,min选项之间的差异和时间选项是参数。

  • 分论点将它的参数为分钟。例如,60分钟(1小时)= 60分钟。
  • 时间参数,将它的参数为24小时。例如,时间2 = 2 * 24小时(2天)。
  • 虽然这样做的24个小时计算,小数部分都将被忽略,所以25小时为24小时,和47小时取为24小时,仅48小时为48小时。要获得更清晰的参考atime的部分find命令的手册页。

例1:找到在1个小时内被更改的文件

想要通过文件修改时间找出文件,可以使用参数 -mmin -mtime。下面是man手册中有关mmin和mtime的定义。

  • -mmin n?文件最后一次修改是在n分钟之内
  • -mtime n?文件最后一次修改是在?n*24小时之内(译者注:也就是n天了呗)

执行下面例子中的命令,将会找到当前目录以及其子目录下,最近一次修改时间在1个小时(60分钟)之内的文件或目录

# find . -amin -60

?

同样的方式,执行下面例子中的命令,将会找到24小时(1天)内被访问了的文件(文件系统根目录 / 下)

# find / -atime -1

?

例2:找到1个小时内被访问过的文件

想要通过文件访问时间找出文件,可以使用参数 -amin -atime。下面是man手册中有关amin和atime的定义。

  • -amin n?文件最后一次访问是在n分钟之内
  • -atime n?文件最后一次访问是在?n*24小时之内

执行下面例子中的命令,将会找到当前目录以及其子目录下,最近一次访问时间在1个小时(60分钟)之内的文件或目录

# find . -amin -60

?

同样的方式,执行下面例子中的命令,将会找到24小时(1天)内被访问了的文件(文件系统根目录 / 下)

# find / -atime -1

?

例3:查找一个小时内状态被改变的文件

(译者注:这里的改变更第1个例子的更改文件内容时间是不同概念,这里是更改的是文件inode的数据,比如文件的权限,所属人等等信息)

要查找文件的inode的更改时间,使用-cmin和-ctime选项

  • -cmin n??文件的状态在n分钟内被改变
  • -ctime n??文件状态在n*24小时内(也就是n天内)被改变

(译者注:如果上面的n为-n形式,则表示n分钟/天之内,n为+n则表示n分钟/天之前)

下面的例子在当前目录和其子目录下面查找一个小时内文件状态改变的文件(也就是60分钟内):

# find . -cmin -60

?

同样的道理,下面的例子在根目录/及其子目录下一天内(24小时内)文件状态被改变的文件列表:

# find / -ctime -1

?

例4:搜索仅仅限定于文件,不显示文件夹

上面的例子搜索出来不仅仅有文件,还会显示文件夹。因为当一个文件被访问的时候,它所处的文件夹也会被访问,如果你对文件夹不感兴趣,那么可以使用 -type f 选项

下面的例子会显示30分钟内被修改过的文件,文件夹不显示:

# find /etc/sysconfig -amin -30
.
./console
./network-scripts
./i18n
./rhn
./rhn/clientCaps.d
./networking
./networking/profiles
./networking/profiles/default
./networking/profiles/default/resolv.conf
./networking/profiles/default/hosts
./networking/devices
./apm-scripts
[注: 上面的输出包含了文件和文件夹]
 
# find /etc/sysconfig -amin -30 -type f
./i18n
./networking/profiles/default/resolv.conf
./networking/profiles/default/hosts
[注: 上面的输出仅仅包含文件]

?

例5: 仅仅查找非隐藏的文件(不显示隐藏文件):

如果我们查找的时候不想隐藏文件也显示出来,可以使用下面的正则式查找:

下面的命令会显示当前目录及其子目录下15分钟内文件内容被修改过的文件,并且只列出非隐藏文件。也就是说,以.开头的文件时不会显示出来的

# find . -mmin -15 \( ! -regex ".*/\..*" \)

?

基于文件比较的查找命令

我们平时通过更别的东西进行比较,会更容易记住一些事情。比如说我想找出在我编辑test文件之后编辑过的文件。你可以通过test这个文件的编辑时间作为比较基准去查找之后编辑过的文件:

?

例6: 查找文件修改时间在某一文件修改后的文件:?

语法: find -newer FILE

?

下面的例子显示在/etc/passwd修改之后被修改过的文件。对于系统管理员,想知道你新增了一个用户后去跟踪系统的活动状态是很有帮助的(万一那新用户不老实,一上来就乱搞,你很快就知道了 ?^_^):

# find -newer /etc/passwd
?

例7:查找文件访问时