find命令的一点注意事项

其实也不是find命令的问题,以前总写不对find命令,今天才发现原因在哪里了。

        

  1. 如果文件不够多我们也不使用find命令;
  2.     

  3. find命令的结果是文件名,要想知道自己find的结果是否正确,一般管道输出给ls
  4.     

  5. 于是命令很容易写成: find …. | ls -lh
  6.     

  7. 结果看到的总是目录内的所有内容,似乎是find失效,为什么呢?
  8.     

  9. 命令应该写成: find … | xargs ls -lh
  10.     

  11. 看到了吧,就一个xargs只差,把所有的罪过都错给了find命令了


下面写几个find命令已做纪念:

        

  • 查找大于30k,并且小于30M的文件:

ffind . -type f -size +30k -size -30M |xargs ls -lh

注意:

        

  1. size的单位有: cbkMG , 里面的“k”是小写的,M、G是大写的
  2.     

  3. 两个size条件之间是“并且”的关系,如果需要“或”关系,可以使用 “-or” 链接两个条件
        

  • 查找小于30k,或者大于30M的文件:

find . -type f -size -30k -or -size +30M |xargs ls -lh

        

  • 查找小于30k,或者大于30M,或者文件名以“abc”开头的文件:

find . -type f -size -30k -or -size +30M -name  -or "abc*" |xargs ls -lh

        

  • 查找小于30k,或者大于30M,并且文件名以“abc”开头的文件:

find . -type f -size -30k -or -size +30M -name  "abc*" |xargs ls -lh

注意:

        

  1. “-or”命令只对后面的一个过滤器有效

关于 -ls 选项的几点用法

为了显示结果方便,find命令内置了-ls选项,使得结果就像ls输出的结果那样,实例:

        

  • 查找小于30k,或者大于30M的文件:

find . -type f -size -30k -ls -or -size +30M -ls

注意: 这里的“-ls”写了两次,如果只写在后面,则小于30k的文件是显示不出来的,这就是该实例的意义所在

        

  • 查找大于30k,并且小于30M的文件:

find . -type f -size +30k -size -30M -ls

        

  • 注意下面这条命令:

find . -type f -size -30k -ls -size +30M -ls

该命令输出的是小于30k的文件,而没有输出大于30M的文件,更不是什么也不输出

按时间查找:

        

  • 最近2天内被修改过的文件
        find . -type f -mtime -2 -ls  
  •     

  • 最近10分钟(用-amin)内被读过的文件
        find . -type f -amin -10 | xargs ls  -lu
        
        注意:这里没有使用ls,因为ls默认显示的是文件的最后修改时间,但是这里条件是访问时间,如果显示的是修改时间,你将不知道你查的结果对还是不对

留下评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据