在 Linux 下使用 find 指令查询目录与档案的速查笔记

在 Linux 平台下找档案不外乎使用威力强大的 find 命令,威力强大的背后就是有一点点学习曲线,不过整体上来说还算简单,因此想写一篇文章留下备忘,让自己日后可以快速查阅参考。

【 基本语法】

查询档案名称 (也可以查询「目录名称」,其中 * 是万用字元)

find $HOME -name '*.mp3'

注 1 : $HOME 是 Linux 下的一个环境变数,预设指向执行帐号的 HOME 目录

查询档案名称 (不区分大小写)

find /etc -iname 'Network'

指定只要搜寻「档案」名称

find /var/log -iname '*.log' -type f

指定只要搜寻「目录」名称

find /etc -iname 'apache2' -type d

补充说明:可用的–type 参数值如下

b block (buffered) special

c character (unbuffered) special

d directory (一般目录)

p named pipe (FIFO)

f regular file (一般档案)

l symbolic link

s socket

D door (Solaris)

找寻所有档案大小大于 50MB 的档案

find /var -type f -size +50M

注 1 : 不加上–name 参数即代表搜寻所有档案

找寻所有档案大小小于 50MB 的档案

find /var -type f -size -50M

寻找超过 7 天没有被存取或修改过的档案 (判断档案存取时间)

find $HOME -type f -atime +7

寻找曾经在 7 天内被存取或修改过的档案 (判断档案存取时间)

find $HOME -type f -atime -7

寻找超过 10 分钟没有被存取或修改过的档案 (判断档案存取时间)

find $HOME -type f -amin +10

寻找曾经在 10 分钟内被存取或修改过的档案 (判断档案存取时间)

find $HOME -type f -amin -10

寻找档案建立时间已超过 30 天的档案

find $HOME -type f -ctime +30

寻找特定使用者的档案 (以帐号名称 tom 为例)

find $HOME -type f -user tom

【 进阶应用】

删除 30 天以上未经存取过的暂存档案 ( 注意: 以下指令最后一个分号 (? 前一定要加上反斜线 )

find /tmp -type f -atime +30 -print -exec rm -f '{}' \;

注 1 : 加上–print 是为了让被删除的档案档名一并显示在画面上,这个参数可以省略
注 2 : 使用–exec 会让查询到的每一个档案路径代入’{}'位置,一个档案会执行一遍 rm 命令

删除 30 天以上未经存取过的暂存档案 ( 使用 xargs 当成单一命令的参数 )

find /tmp -type f -print0 | xargs -0 rm -v

注 1 : 加上–print0 是为了让输出的结果不以「断行字元」分隔,而改以 null 为结果的分隔字元
注 2 : 使用 xargs 命令加上–0 是为了让传入的资料以 null 字元当成参数的分隔 注 3 : 使用 rm 命令加上–v 是为了能显示出被删除的档案名称,这个参数可以省略 注 4 : 使用 xargs 会将所有 find 命令查到的档案转换成 rm 的参数列,如果档案过多可能会执行失败! 注 5 : 使用 xargs 可确保后面的程式 (rm) 只执行一次,所以理论上执行速度较快!

相同参数需输入多笔并且以「或」逻辑运算时要用–o 参数串接起来

例 1:同时找两种档名样式的档案

find $HOME -name '*.mp3' -o -user '*.ogg'

例 2:同时找两个拥有者的档案

find /usr/ local -user user1 -o -user user2

【 注意事项】

  • 使用万用字元时务必加上单引号 (’)

    !!以下是错误示范!!

  • [user1@server ~]# find $HOME -name *.txt
    find: paths must precede expression
    Usage: find [path…][expression]

你可能感兴趣的:(Linux,学习)