这道题考察的是当一个命令接上很多参数(几十万以上)会报一个错误:Argument list too long
因此你没有办法touch这么多文件,也没有办法一次性删除这么多文件。
<code>[root@oldboydata]</code><code># touch test{1..500000}</code>
<code>-</code><code>bash</code><code>:</code><code>/bin/touch</code><code>: Argument list too long</code>
那该如何解决呢?
创建测试文件
<code>mkdir</code><code>/data</code> <code>&& </code><code>cd</code> <code>/data</code>
<code>for</code> <code>i </code><code>in</code> <code>{1..50};</code><code>do</code> <code>eval</code> <code>touch</code> <code>test</code><code>{$((i-1))0000..${i}0000};</code><code>done</code>
#尝试使用rm删除
<code>[root@oldboydata]</code><code># rm -f *</code>
<code>-</code><code>bash</code><code>:</code><code>/bin/rm</code><code>: Argument list too long</code>
解决方法:
<code>1) </code><code>ls</code><code>|</code><code>xargs</code> <code>rm</code> <code>-f</code>
<code>2) </code><code>find</code> <code>. -</code><code>type</code> <code>f|</code><code>xargs</code> <code>rm</code> <code>-f</code>
<code>3) </code><code>mkdir</code> <code>/null</code>
<code>rsync</code><code>-av --delete </code><code>/null/</code> <code>/tmp/</code>
删除文件消耗时间测试:
[
<code>root@oldboy/]</code><code># cd data</code>
<code>[root@oldboydata]</code><code># time ls |xargs rm</code>
<code> </code>
<code>real 0m7.651s</code>
<code>user 0m2.273s</code>
<code>sys 0m4.446s</code>
#再次创建测试文件
<code>[root@oldboy/]</code><code># cd data/</code>
<code>[root@oldboydata]</code><code># time find . -type f|xargs rm -f</code>
<code>real 0m7.482s</code>
<code>user 0m0.426s</code>
<code>sys 0m5.096s</code>
<code>[root@oldboy~]</code><code># mkdir /null</code>
<code>[root@oldboy~]</code><code># time rsync -a --delete /null/ /data/</code>
<code>real 0m10.572s</code>
<code>user 0m0.724s</code>
<code>sys 0m7.893s</code>
今天是老男孩教育每日一题陪伴大家的第30天。
对于题目和答案的任何疑问,请在博客评论区留言。
往期题目索引
<a href="http://lidao.blog.51cto.com/3388056/1914205" target="_blank">http://lidao.blog.51cto.com/3388056/1914205</a>
本文转自 李导 51CTO博客,原文链接:http://blog.51cto.com/lidao/1916945