find 命令-size條件 判斷的文件大小不準(zhǔn)確問題,顯現(xiàn)如下
find查找size 大于1k小于5k的結(jié)果集里 有個9k的,原因是什么呢?
[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
2015-06-15
問題出在之后的命令“l(fā)s -lh”。命令"find . -size -5k -exec ls -lh {} \;"中,“{}”的含義其實是對find命令執(zhí)行的結(jié)果進(jìn)行替換,而"find . -size -5k"這命令的實際執(zhí)行結(jié)果是會把當(dāng)前目錄也列進(jìn)去的,這?其實就相當(dāng)于執(zhí)行了兩步。參考我自己的例子,第一步:
第二步:
看出問題了嗎? 執(zhí)行“l(fā)s -lh .”?實際上只是把當(dāng)前目錄里的所有文件都打印出來,而不管里面的內(nèi)容有是多大。
所以正確的第二部其實應(yīng)該是這樣的:
這樣做的區(qū)別就在于,“l(fā)s -dlh”只要求ls命令打印目錄自身,而不是顯示該目錄下的內(nèi)容。請?zhí)貏e留意,目錄本身其實是占4.0K大小的,這也就是為什么第一步用“find . -size -5k”正好會把當(dāng)前目錄給找出來,進(jìn)而被“l(fā)s -lh”打印出里面的內(nèi)容的原因了。課件中是“find /etc -size +20k -a -size -50k”,這個大小正好不會打印出目錄類型,所以執(zhí)行結(jié)果是歪打正著變成正確的。
2015-06-18
-d,?–directory?將目錄象文件一樣顯示,而不是顯示其下的文件
是不是ls -dlh 后用{}執(zhí)行與find結(jié)果替換