• Linux命令行下搜索文件-Find命令使用介绍

    Posted on 十二月 26th, 2007 inetdemon No comments

    linux命令行下查找文件的可以用Find命令,Find功能强大,还可以何xargs配合起来。例如,我要找/home/logs目录下比7天之前修改的owner为nobody的文件:

    find /home/logs -name access.log.* -mtime +7 -user nobody -maxdepth 1 -exec ls -l {} \;

    查找比my-test文件新,比my-test2的文件旧的普通文件并删除,删除前提示确认:

    find /home/logs -newer my-test ! -newer my-test2 -type f -ok rm {} \;

    时间选项

    -mtime -n +n
    按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项类似:
    -amin n
      查找系统中最后N分钟访问的文件
      -atime n
      查找系统中最后n*24小时访问的文件
      -cmin n
      查找系统中最后N分钟被改变文件状态的文件
      -ctime n
      查找系统中最后n*24小时被改变文件状态的文件
        -mmin n
      查找系统中最后N分钟被改变文件数据的文件
      -mtime n
      查找系统中最后n*24小时被改变文件数据的文件

    EXEC, OK和xargs

    使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便。exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个反斜杠\,最后是一个分号。为了使用exec选项,必要的话可同时使用print选项。

    -ok和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

    find /home/ -name *.gz -exec mv {} /data/archive/ \; 2> /dev/null

    find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去

    在当前目录下的所有nobody组用户拥有的普通文件中查找"hostname"
    # find . -type f -group nobody -print | xargs grep "hostname"
    回收读写权限
    # ls -l
    drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6
    -rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf
    -rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf
    # find . -perm -7 -print | xargs chmod o-w
    # ls -l
    drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6
    -rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
    -rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf

    本文参照了find的用法中文介绍,比较详细,还包含一定的例子。

    Leave a reply