[原创]大量文件操作时避免“参数列表过长”_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2961 | 回复: 0   主题: [原创]大量文件操作时避免“参数列表过长”        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2014-5-30 9:11:43 | [全部帖] [楼主帖] 楼主

正常情况下,我们使用ls a* 可以显示本目录下所有以a开头的文件,但是如果文件多了,就没那么简单了。比如:

% ls *
/sbin/ls: Argument list too long.


其实遇到最多的时候是删除,通常一个rm –rf * 可以解决本目录下所有的文件,但是如果文件数量特别多,特别是上万个,那么你也会遇到“Argument list too long.”,或者中文的“参数列表过长”。

网上的解决办法很乱,有的甚至是误导,其实归根结底就三招:

1、到上一层目录解决(这招网上很少见^_^)。

2、用find神器

3、用xargs

环境:

/web/upload下有6万多个文件

/web/upload % ll | wc
60552 544961 4824590


1、上级目录大法:

本级目录不行,那就跑到上一级目录

/web/upload % ls *
/sbin/ls: Argument list too long.
/web/upload %cd /web
/web/upload %ls /web/*
/web/upload:
eclass_0043_20140508095200.xml
eclass_0094_20140504081735.xml
eclass_0043_20140508095925.xml
……


顺便说一句,tar也会遇到这个问题,如果需要向tar包中添加的第一级目录文件数过多,那么也会遇到“参数列表过长”的错误,其实最简单的解决方法就是把上一级目录添加到压缩包里面,所有的子目录中的文件,都会乘乘地束手就擒了——有点擒贼先擒王的味道,或者是遇到问题找领导!

2、find神器法

find其实是一个神器,不仅能查找文件,而且有个-exec参数,可以把查到的文件进行操作:

find ./ -name “*” –exec ls –l {} \;


解释一下:

-exec参数:可以在找到文件后,运行指定的命令,本例就是ls;命令还可以带自己的参数,本例���带了一个-l,表示显示详细信息;{}是一个占位符,代表查找到的文件;本命令本来用分号(;)结束,但是由于分号在大多数shell下都是保留字,所以需要用反斜杠做一下转义。

3、xarg法:

其实这跟find用法差不多,xarg把用管道送过来的数据当命令的参数,还是这个例子,改为xarg为:

find ./ -name “*” | xargs ls –l


  xargs还有其它一些高级的应用,比如数量多的时候,可以再用-n进行分隔。

该贴由hui.chen转至本版2014-11-5 17:04:59




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论