我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于"Argument list too long”参数列表过长的四种解决方法

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于"Argument list too long”参数列表过长的四种解决方法

目录
  • 四种解决”Argument list too long”参数列表过长的办法
    • 另外4种方法
  • 补充:linux中“Argument list too long”解决方法

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

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

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

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

     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 di
    

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

      需要说明的是,上面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命

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

    function huge_mv ()
    {whileread line1; do
    mv foo/$line1 ../foo2
    done
    }
    ls -1 foo/ | huge_mv

    写一个shell函数并不涉及到某种程度的复杂性, 这种方法比方法1和方法2相比更加灵活。
    下面我们来扩展一下例3.1 :
    e.g 3.2:

    function huge_mv ()
    {whileread line1; do
    md5sum foo/$line1 >> ~/md5sums
    ls -l foo/$line1 >> ~/backup_list
    mv foo/$line1 ../foo2
    done
    }
    ls -1 foo/ | huge_mv

    相比例3.1,例3.2生成了文件的md校验散列文件和名字备份,符合给自己留条后路的哲学。
    另外可以根据自己的需要无限制的扩展功能。

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

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


    #define MAX_ARG_PAGES 32

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

    转自

    http://hi.baidu.com/cpuramdisk/item/5aa49ce00c0757aecf2d4f24

    补充: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 {}

    参考:

    http://noahsnail.com/2017/11/23/2017-11-23-Linux%E4%B8%AD%E2%80%9CArgument%20list%20too%20long%E2%80%9D%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/

    到此这篇关于关于"Argument list too long”参数列表过长的四种解决方法的文章就介绍到这了,更多相关Argument list too long内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    免责声明:

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

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

    关于"Argument list too long”参数列表过长的四种解决方法

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

    下载Word文档

    猜你喜欢

    关于"Argument list too long”参数列表过长的四种解决方法

    目录四种解决”Argument list too long”参数列表过长的办法另外4种方法补充:linux中“Argument list too long”解决方法四种解决”Arg
    2023-02-20

    关于"Argument list too long”参数列表过长的四种解决方法

    Linux下报错“命令参数列表过长”,在用mv命令一次移动3万多个文件时失败了,原始命令类似这样:”mv $(ls dir1) dir2“,错误提示的中心思想是:”你这参数也太TM多了吧“,本文给大家分享四种解决”Argument list too long”参数列表过长,感兴趣的朋友一起看看吧
    2023-02-20

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

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

    编程热搜

    目录