首页 > 其他分享 >四种解决”Arg list too long”参数列表过长的办法

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

时间:2023-08-18 11:32:53浏览次数:41  
标签:xargs list long mv 参数 too foo find ls

在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 dir1 | xargs -t -I asdf mv asdf dir2/asdf

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

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



另外4种方法

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


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

bash: /bin/mv: Arg list too long

“Arg 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; 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文件 ,搜索到以下字段:

/*

* MAX_ARG_PAGES defines the number of pages allocated for arg

* and envelope for the new program. 32 should suffice, this gives

  • a maximum . env+arg of 128kB w/4KB pages!

*/

#define MAX_ARG_PAGES 32

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

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

标签:xargs,list,long,mv,参数,too,foo,find,ls
From: https://blog.51cto.com/chengzheng183/7133210

相关文章

  • list 中的Stream 累加操作
    ublicclassTest{publicstaticvoidmain(String[]args){doublesum=860.10+1808.09;doublesum1=1808.09+860.10;//outputis2668.19System.out.println(sum);//outputis2668.19System.out......
  • accesskey_tools:一款针对云环境的多功能利用脚本工具
    一、 关于accesskey_tools"accesskey_tools"是一个基于Python开发的多平台云环境利用辅助脚本。该工具可用于测试中,因开发的不规范,以及一些其它漏洞,拿到泄漏AK/SK的情况下,测试人员可以直接利用这些凭证对云服务器进行测试,及时修复风险并采取相应措施,确保云环境中的敏感凭证不......
  • 使用MSIX Packaging Tool工具修改msix程序包
    前言MSIXPackagingTool使用户和IT管理员能够将Windows应用重新打包为MSIX格式,方便用户分享,MSIX包可在Windows11和Windows10系统中安装。该软件提供了一个交互式用户界面和一个用于转换的命令行。修改步骤1、获取MSIXPackagingToolWindows10通过应用商店获取......
  • 「Temp」To Do List
    DP方向单调队列优化DP斜率优化DP状压DP数位DP图论方向差分约束强联通分量、点双边双Floyd(拓展)字符串方向ACAMSAM数论方向逆元欧拉函数线性筛莫比乌斯反演高斯消元行列式矩阵树定理杜教筛容斥原理(待定)斯特林数(待定)卡特兰数......
  • 【软硬件环境与工具使用】setuptools模块
    前言  1)setuptools之setup函数参数详解BuildingandDistributingPackageswithSetuptools-setuptools68.0.0.post20230808documentationPython库打包分发(setup.py编写)简易指南|Huoty'sBlogsetup.py实现C++扩展和python库编译_pythonsetup.py编译_ming7771......
  • 虚拟机安装:VMware Tools安装错误——本程序需要您将此虚拟机上安装的操作系统更新到SP
    1.为系统版本问题,直接更换win7版本。提供sp1版本地址如下------百度找到的其他人的安装数据【Windows7SP1旗舰版x64安装版,安全补丁更新到了2015年的年初.大小:4739917824字节MD5:10AFCEF70AFCA7D2E4B5B6433C8F86ACSHA1:2D4816D9DF963469400CCFCA99BAA74260081F16CRC3......
  • redis:List
    List与Java中的LinkedList类似,可以看做一个双向链表,同时支持正反向检索。特征:有序元素可重复增删速度快查询速度一般常用命令命令用法说明lpushrpushlpush/rpushKV1V2V3往K的左/右插入Vlpoprpoplpop/rpopK从K的左/右移除一个Vllenl......
  • CentOS7.6安装VMware Tools小白保姆级教程
    一.安装环境1.操作系统CentOS-7.6-x86_64-DVD-1810.isoRoot用户!!!2.虚拟机设置二.安装步骤1.进入root用户后,右键挂载的ISO镜像文件,点击弹出!!!(若不弹出无法正常安装VMwareTools)2.点击虚拟机->重新安装VMwareTools3.耐心等待桌面出现VMwareTools的ISO镜像文件4.打开VMwa......
  • [32]Longest Valid Parentheses
    ContentGivenastringcontainingjustthecharacters'('and')',returnthelengthofthelongestvalid(well-formed)parenthesessubstring. Example1:Input:s="(()"Output:2Explanation:Thelongestvalidparentheses......
  • css教程-li的list-style-type属性
    CSS中的ulli是用来定义无序列表样式的。其中,ul表示无序列表(unorderedlist),li表示列表项目(listitem)。你可以使用CSS来为ulli元素设置样式,如下所示:ul{list-style-type:disc;/*设置列表项的标志样式为实心圆*/margin:0;/*清除默认的外边距*/padding:0;/*清除......