其实也不是find命令的问题,以前总写不对find命令,今天才发现原因在哪里了。
- 如果文件不够多我们也不使用find命令;
- find命令的结果是文件名,要想知道自己find的结果是否正确,一般管道输出给ls
- 于是命令很容易写成: find …. | ls -lh
- 结果看到的总是目录内的所有内容,似乎是find失效,为什么呢?
- 命令应该写成: find … | xargs ls -lh
- 看到了吧,就一个xargs只差,把所有的罪过都错给了find命令了
下面写几个find命令已做纪念:
- 查找大于30k,并且小于30M的文件:
ffind . -type f -size +30k -size -30M |xargs ls -lh
注意:
- size的单位有: cbkMG , 里面的“k”是小写的,M、G是大写的
- 两个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
注意:
- “-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默认显示的是文件的最后修改时间,但是这里条件是访问时间,如果显示的是修改时间,你将不知道你查的结果对还是不对