shell-文件数太多的查看方法
花接受凋零,风接受追寻
继昨天搞定那个路径问题后,今天又遇到了一个新的问题。就是需要去某个特定的目录下,去找出一个以某个前缀开头的文件,然后复制一份出来。看着在简单不过的事,但是实际情况是这个目录下的文件多的可怕。稍微小一点的目录有几万个文件吧,大一点的我用ls -l | wc -l
花了一分钟没计算出来到底有多少个文件。
所以我想可不可以加快一下查询速度?百度了一下,有解决办法,就是使用ls
的时候,它是排序了的,这样花费了很多时间,所以需要让它不排序,可以加的参数就有-f
/-U
/--sort=none
。然后我试了一下ls -f | wc -l
这个命令,在查询含有几万个文件的这种目录中,速度确实得到了极大的提升,只用了2秒就计算出来了。但是那些比较大的目录中,仍然查询不出来。
我一个同事说可以使用find
这个命令,它就不是像ls
这样先列出所有文件,而是需要几个它就搜索几个,而我需要的就是这个功能,因为我只需要找到那么一个文件就够了,根本不需要使用ls
去把所有的文件列一遍。这有点像正则里面的贪婪匹配一样
1 | find . -name 'prefix*' -type f | head -n1 |
问题得到了解决,但是我觉得我linux用了几年了,ls
用的太多,就像windows用户无聊老是右键刷新一样。而忘记了它的工作原理,所有的文件,都是内存中的一个数据块,而我们使用ls
的时候,就是在这个数据块中去找出这些文件来然后打印出来,我还加了一个-l
的参数,加了这个参数之后,它需要做更多的事了,需要找它的权限,所有者,所属组,计算文件大小等等工作,也难怪它那么慢。但是find
这个命令就不一样了,它是从一堆数据块中去找某些数据,找到一个返回一个,并不需要全部找到后才可以。所以这就是为什么find
运行起来速度那么快的原因。
公司聚餐,有点远,花了8块钱的地铁费。本来是不准备去的,但是说不去要罚款,所以还是去了,虽然吃的东西很好,但是我感觉来来回回的特别累。相比于那些丰盛的蛋白质,我更喜欢自己做的宇宙级好吃的面条。如果有下次我不想去了