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

这篇具有很好参考价值的文章主要介绍了【Linux】Argument list too long参数列表过长的办法-四种。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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结尾的文件。

  • 命令1为:

find test/ -name "*.jpg" | xargs -i rm {}
  • 命令2为:

find test/ -name "*.jpg" -execrm {} \;

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

  • 命令1为:

find test/ -name "*.jpg" | xargs -i cp {} train
  • 命令2为:

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; do
mv foo/$line1 ../foo2
done
}
ls -1 foo/ | huge_mv

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

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

例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校验散列文件和名字备份,符合给自己留条后路的哲学。

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

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

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

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

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

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

/*

* MAX_ARG_PAGES defines the number of pages allocated for arguments

* 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 或者更高即可完善的解决参数受限问题。

然后 重新编译并启用新内核即可。文章来源地址https://www.toymoban.com/news/detail-693273.html

到了这里,关于【Linux】Argument list too long参数列表过长的办法-四种的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Intellij IDEA运行报Command line is too long的解决办法

    想哭,vue前端运行起来,对应的后端也得起服务。 后端出的这个bug,下面的博客写的第二种方法,完整截图是下面这个。 ​​​​​​​​​​​​​​​​​​​​Intellij IDEA运行报Command line is too long的解决办法 - 知乎 (zhihu.com)​​​​​​​  ​​​​​​​    

    2024年02月14日
    浏览(42)
  • windows下git clone时出现“Filename too long”错误的解决办法

    在windows下,当使用git clone复制项目时,出现下述错误表示项目中有文件民字符过长的问题,需要开启git的长路径支持解决: 方法如下: 使用管理员模式运行git 设置系统变量为长路劲有效: Note : 如果第二步还是报错,可以设置git全局变量的长路径有效: 更多git的  git config设置

    2024年02月06日
    浏览(50)
  • 【 -bash: /usr/bin/id: 参数列表过长】

    这个错误提示说明在执行 /etc/profile 或者 /etc/profile.d 目录下的脚本时,出现了参数列表过长的问题。这可能是由于环境变量或者执行的命令导致的。 要解决这个问题,可以尝试以下方法: 检查脚本内容:检查 /etc/profile 和 /etc/profile.d 目录下的脚本文件,特别是 colorgrep.sh 和

    2024年02月16日
    浏览(41)
  • 报错Command line is too long. Shorten the command line xxx【解决办法】

    运行springboot项目的时候,出现报错,报错信息如下: Error running OrderServiceBoot. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun. 报错原因: springboot项目启动命令过长 解决办法 解决方法有两种,正如报错信息截图所示,缩短命令行或者改为应用程

    2024年02月11日
    浏览(45)
  • idea 中运行spring boot 项目报 Command line is too long的解决办法。

    在这里选择edit configures 选择shrten command line , 选择 jar manifest 运行即可。

    2024年04月12日
    浏览(35)
  • Command line is too long

    目录 一、遇到的问题 二、使用环境 三、问题分析 四、解决方案 1、解决方式一 2、解决方式二 上周五,我要改造一个之前从未接触过的 SpringBoot 项目。我用 git 拉下代码后,试图使用 Idea 运行它。但是,Idea 在运行时抛出了一个问题:Error running \\\'Application\\\': Command line is too l

    2023年04月23日
    浏览(41)
  • Git 遇到“File name too long”问题

    1. 在git的命令行界面(git bash)或者Terminal 中输入 git config --get core.longpaths  , 可以看到界面中是返回了“ false ”; 2. 接着我们就可以输入 git config core.longpaths true 设置core.longpaths这个配置项为 true 。 如果还是不行,就输入 git config --global core.longpaths true 然后问题“File name to

    2024年04月09日
    浏览(75)
  • 解决使用git时遇到的“Filename too long“问题

    【问题】 :  git 命令操作提示Filename too long,一般是在windows下出现的问题。git可以创建4096长度的文件名,然而在windows最多是260。 【解决方案】 git bash命令窗口输入 –global或者system是该参数的使用范围,只想对本版本库设置该参数,上述命令中去掉–global或system。

    2024年02月08日
    浏览(49)
  • idea 启动报错 Command line is too long

    启动报错信息: Error running ‘Application‘: Command line is too long. 翻译过来就是:启动命令过长! 解决方案 1、点开项目启动配置项目; 2、 shorten command line 选项选择 JAR manifest 或者 classpath file 选项,点击 Apply 和 OK,然后重启项目; Error running test: Command line is too long 上面是运行

    2024年02月10日
    浏览(54)
  • windows下使用GIT拉取代码提示filename too long

    场景:windows下面使用idea、或者tortoisegit(git小乌龟)从git上面拉取代码时报错: fatal: unable to stat \\\'****/***/******/****/*****/****/****.**\\\': Filename too long。这个错误是git报的错。(加红是一个文件路径)           上面这种错误就是使用git拉取或者提交项目时,遇到长路径提示fi

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包