iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Argument list too long参数列表过长如何解决
  • 426
分享到

Argument list too long参数列表过长如何解决

2023-07-05 04:07:55 426人浏览 薄情痞子
摘要

今天小编给大家分享一下Argument list too long参数列表过长如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章

今天小编给大家分享一下Argument list too long参数列表过长如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    四种解决”Argument list too long”参数列表过长的办法

    linux中删除大量文件时,直接用rm会出现:-bash: /bin/rm: 参数列表过长的错误。

    这时可以用find命令来结合使用。

    例:
    1、rm * -rf 改为:

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

    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。至于参数的含义嘛,我忘了。

     Linux下 报错“命令参数列表过长”,在用mv命令一次移动3万多个文件时失败了,原始命令类似这样:”mv $(ls dir1) dir2“。错误提示的中心思想是:”你这参数也太TM多了吧“。

    按照LZ想法大概可以这么做:find /dir1/ -maxdepth 1 | xargs -i mv {} /dir2/
    如果参数过长,使用tar比较简单

    tar -C /dir1/ -cf - . | tar -xf - -C /dir2/

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

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

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

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

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

      需要说明的是,上面xargs的第二个参数,是大写的i,读作”爱“的那个字母,不是小写的L。至于参数的含义嘛,我忘了。

    另外4种方法

    作为一个linux用户/系统管理员, 有些时候你会遇到以下错误提示:

    [user@localhost foo]$ mv * ../foo2

    bash: /bin/mv: Argument list too long

    “Argument list too long”参数列表过长错误经常发生在用户在一行简单命令中提供了过多的参数而导致,经常在ls *, cp *, rm * 等中出现。
    根据问题的原因以下提供了四种方法,可以根据自己的情况酌情选用

    方法1 : 将文件群手动划分为比较小的组合
    e.g 1:

    [user@localhost foo]$ mv [a-l]* ../foo2[user@localhost foo]$ mv [m-z]* ../foo2

    这是最基本的方法,只是简单的使参数数量符合要求,这种方法应用范围有限,只适用于文件列表中的名字分布比较均匀,另外这也是个初级用户可以考虑的解决方案,不过需要很多重复命令和对文件名分布的观察与猜测。

    方法2 : 使用find命令
    e.g 2:

    [user@localhost foo]$ find $foo -type f -name '*' -exec mv {}$foo2/. \;

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

    方法3 : 创建shell函数
    e.g 3.1:

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

    写一个shell函数并不涉及到某种程度的复杂性, 这种方法比方法1和方法2相比更加灵活。
    下面我们来扩展一下例3.1 :
    e.g 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校验散列文件和名字备份,符合给自己留条后路的哲学。
    另外可以根据自己的需要无限制的扩展功能。

    方法4 : 终极解决方案,重新编译内核

    首先使用这个方案之前要谨慎,因为涉及到修改内核源代码,在生产环境中还是要斟酌一下并做好测试
    另外,这个方法是从根本上解决的,一劳永逸的 
    这也是开放源码的好处之一 
    首先在内核源码中找到 include/linux/binfmts.h文件 ,搜索到以下字段:


    #define MAX_ARG_PAGES 32

    修改 MAX_ARG_PAGES数值为 64 或者更高即可完善的解决参数受限问题。
    然后 重新编译并启用新内核即可。

    补充:Linux中“Argument list too long”解决方法

    当我想执行以下命令时,报错:

    mv train2014/* coco_train2014/
    -bash: /bin/mv: Argument list too long

    这是因为这些命令的参数太长,即文件个数过多。其中 train2014 文件夹的内容全是 .jpg 格式的图片文件 解决的方法如下:

    find train2014/ -name "*.jpg" | xargs -i mv {} coco_train2014/

    同理使用 cp, ls 等命令也可以以同样的方式执行:

    拷贝:

    find train2014/ -name "*.jpg" | xargs -i cp {} coco_train2014/

    删除:

    find train2014/ -name "*.jpg" | xargs -i rm {}

    以上就是“Argument list too long参数列表过长如何解决”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: Argument list too long参数列表过长如何解决

    本文链接: https://www.lsjlt.com/news/349432.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C++ 生态系统中流行库和框架的贡献指南
      作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
      99+
      2024-05-15
      框架 c++ 流行库 git
    • C++ 生态系统中流行库和框架的社区支持情况
      c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
      99+
      2024-05-15
      生态系统 社区支持 c++ overflow 标准库
    • c++中if elseif使用规则
      c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
      99+
      2024-05-15
      c++
    • c++中的继承怎么写
      继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
      99+
      2024-05-15
      c++
    • c++中如何使用类和对象掌握目标
      在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
      99+
      2024-05-15
      c++
    • c++中优先级是什么意思
      c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
      99+
      2024-05-15
      c++
    • c++中a+是什么意思
      c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
      99+
      2024-05-15
      c++
    • c++中a.b什么意思
      c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
      99+
      2024-05-15
      c++
    • C++ 并发编程库的优缺点
      c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
      99+
      2024-05-15
      c++ 并发编程
    • 如何在 Golang 中备份数据库?
      在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
      99+
      2024-05-15
      golang 数据库备份 mysql git 标准库
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作