为了账号安全,请及时绑定邮箱和手机立即绑定

find 命令-size条件 判断的文件大小不准确问题,显现如下

find查找size 大于1k小于5k的结果集里 有个9k的,原因是什么呢?

http://img1.sycdn.imooc.com//5533c80a0001509e06150119.jpg

[root@localhost ~]# find . -size -5k -a -size +1k -exec ls -lh {} \;

总用量 20K

-rw-------. 1 root root 1.1K 4月  19 20:20 anaconda-ks.cfg

-rw-r--r--. 1 root root 9.0K 4月  13 17:32 install.log

-rw-r--r--. 1 root root 3.1K 4月  13 17:32 install.log.syslog

-rw-------. 1 root root 1.1K 4月  19 20:20 ./anaconda-ks.cfg

-rw-r--r--. 1 root root 3.1K 4月  13 17:32 ./install.log.syslog


正在回答

2 回答

问题出在之后的命令“ls -lh”。命令"find . -size -5k -exec ls -lh {} \;"中,“{}”的含义其实是对find命令执行的结果进行替换,而"find . -size -5k"这命令的实际执行结果是会把当前目录也列进去的,这 其实就相当于执行了两步。参考我自己的例子,第一步:

~# find . -size -5k

.

./.config

./.config/ranger

./.config/ranger/tagged

./.config/ranger/bookmarks

./.config/ranger/history

./.lesshst

./.cache

./.cache/winetricks

./.bash_history

./.viminfo

第二步:

~# ls -lh .

总用量 60K

-rw-r--r-- 1 root root 57K 6月  14 16:08 1.txt

看出问题了吗? 执行“ls -lh .” 实际上只是把当前目录里的所有文件都打印出来,而不管里面的内容有是多大。

所以正确的第二部其实应该是这样的:

~# ls -dlh .

drwxr-x--- 4 root root 4.0K 6月  14 16:11 .

这样做的区别就在于,“ls -dlh”只要求ls命令打印目录自身,而不是显示该目录下的内容。请特别留意,目录本身其实是占4.0K大小的,这也就是为什么第一步用“find . -size -5k”正好会把当前目录给找出来,进而被“ls -lh”打印出里面的内容的原因了。课件中是“find /etc -size +20k -a -size -50k”,这个大小正好不会打印出目录类型,所以执行结果是歪打正着变成正确的。

4 回复 有任何疑惑可以回复我~
#1

卧珠不知道 提问者

回答得好贴心,非常感谢
2015-11-11 回复 有任何疑惑可以回复我~
#2

码农_鑫森淼焱垚

回答得特别好、指明了老师演示其中的bug、怒赞!!!!!
2015-12-07 回复 有任何疑惑可以回复我~

-d, –directory 将目录象文件一样显示,而不是显示其下的文件

是不是ls -dlh 后用{}执行与find结果替换

0 回复 有任何疑惑可以回复我~
#1

boiloil

第一步执行find得出结果,第二部 执行 ls -dlh {}并用find出来的结果替换’{}‘,具体用法可以man find,参考-exec参数的解释。
2015-06-18 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

find 命令-size条件 判断的文件大小不准确问题,显现如下

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信