文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【Linux】Argument list too long参数列表过长的办法-四种

2023-09-09 18:26

关注

1. 背景

Linux下使用cp,mv,rm,chmod等命令时经常会碰到“Argument list too long”错误,这主要是因为这些命令的参数太长,即文件个数过多。

2. 解决方案

方案一:将文件群手动划分为比较小的组合

[user@localhost ubuntu]$ mv [a-l]* ../foo2

[user@localhost ubuntu]$ mv [m-z]* ../foo2

注:应用范围有限,只适用于文件列表中的名字分布比较均匀,初级用户可以考虑的解决方案

方案二:使用命令 find和xargs

find $foo -type f -name '*' -exec mv {}$foo2/. \;

通过find命令,将文件清单输出到mv命令,使其一次处理一个,这样就完全避免了过量参数的存在,另外通过不同的参数,可以指定除了名称以外的时间戳,权限,以及inode等匹配模式。

缺点:在于比较耗费时间。

举例:

2.1 要删除test文件夹下以jpg结尾的文件。

find test/ -name "*.jpg" | xargs -i rm {}
find test/ -name "*.jpg" -execrm {} \;

2.2 要拷贝test文件夹下以jpg结尾的文件到train目录。

find test/ -name "*.jpg" | xargs -i cp {} train
find test/ -name "*.jpg" -execcp {} train \;

2.3

1、rm * -rf 改为:

find . -name "*" | xargs rm -rf '*' 就行了。

2、rm test* -rf 改为:

find . -name "test*" | xargs rm -rf "test*"

mv时报参数列表过长,

for i in *.m;do mv $i ${i%.m};done

于是求助于google,探索过程就省略了,直接说解决方法吧:

ls dir1 | xargs -t -I {} mv {} dir2/{}

这里的一对大括号是原文给的例子里用的,后来看了参数的用法,其实那对大括号是可以用任意字符串替换的,比如:

ls dir1 | xargs -t -I asdf mv asdf dir2/asdf

效果和大括号那一版是完全一样的,就是看起来有点儿不严肃。

需要说明的是,上面xargs的第二个参数,是大写的i,读作”爱“的那个字母,不是小写的L。

命令解析:

find test/ -name "*.jpg"是指在test文件夹下查找名为*.jpg的文件。

xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。-i会将xargs的内容赋值给{}。

-exec参数后面是指执行其后面的命令,-exec以;为结尾,由于各个系统中分号的意义不同,因此用\进行转义,即\;,{}会被find命令的结果替换

方案三 : 创建shell函数

例3.1:

function huge_mv (){whileread line1; domv foo/$line1 ../foo2done}ls -1 foo/ | huge_mv

写一个shell函数并不涉及到某种程度的复杂性, 这种方法比方法1和方法2相比更加灵活。

下面我们来扩展一下例3.1 :

例3.2:

function huge_mv (){whileread line1; domd5sum foo/$line1 >> ~/md5sumsls -l foo/$line1 >> ~/backup_listmv foo/$line1 ../foo2done}ls -1 foo/ | huge_mv

相比例3.1,例3.2生成了文件的md校验散列文件和名字备份,符合给自己留条后路的哲学。

另外可以根据自己的需要无限制的扩展功能

方案四: 终极解决方案,重新编译内核 【不推荐】

首先使用这个方案之前要谨慎,因为涉及到修改内核源代码,在生产环境中还是要斟酌一下并做好测试。

另外,这个方法是从根本上解决的,一劳永逸的

这也是开放源码的好处之一

首先在内核源码中找到 include/linux/binfmts.h文件 ,搜索到以下字段:

#define MAX_ARG_PAGES 32

修改 MAX_ARG_PAGES数值为 64 或者更高即可完善的解决参数受限问题。

然后 重新编译并启用新内核即可。

来源地址:https://blog.csdn.net/zzddada/article/details/128666195

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯