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

2023-11-18

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 无法加载 JavaHL 库。- linux/eclipse

    在尝试安装 Subversion 插件时 当 Eclipse 启动时出现此错误 Failed to load JavaHL Library These are the errors that were encountered no libs
  • 如何通过替换为空页映射来取消映射 mmap 文件

    Linux 用户空间有没有办法用空页面 映射自 dev null 或者可能是一个空页面 重复映射到从文件映射的页面的顶部 对于上下文 我想找到这个 JDK bug 的修复 https bugs openjdk java net browse
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少

随机推荐

  • AD导入3D模型

    我之前写过一篇文章也是说AD的3D模型的 http blog csdn net tq384998430 article details 78614014 介绍的是使用AD自带的功能绘制3D模型 但是这样绘制出来的形状并不是很好看 如果导入元
  • el-table的无限滚动(效果比虚拟滚动更优)

    步骤 1 前端安装 save el table infinite scrol npm install save el table infinite scroll 2 全局引用 在main js中引用 import Vue from vue
  • C语言实现八进制转十进制

    八进制转十进制 include
  • java类的生命周期

    如图 1 加载 我们编写一个java的源文件 经过编译后生成一个后缀名为 class的文件 这结合四字节码文件 java虚拟机就识别这种文件 java的生命周期就是class文件从加载到消亡的过程 关于加载 其实 就是将源文件的class文
  • 关键元器件选型设计指引--通用逻辑器件(逻辑IC)

    1 物料分类 标准逻辑器件 标准数字逻辑IC集成电路可以从工艺 功能和电平三个方面划分 列表所示 注 常见的逻辑电路有54军用系列和74商用系列 两者电路功能一致 本文仅讨论74系列 按照制造工艺特点分类 工艺 逻辑器件产品族 优点 不足
  • sublime-text3-自定义代码补全

    自定义代码补全 打开sublime text3 选择菜单栏 工具 gt 新代码段 按以下模板填充 content 在CDATA中填补全内容 tabTrigger 触发代码 scope 文件类型 description 描述信息 下例为 输入
  • Kafka一致性

    一 存在的一致性问题 1 生产者和Kafka存储一致性的问题 即生产了多少条消息 就要成功保存多少条消息 不能丢失 不能重复 更重要的是不丢失 其实就是要确保消息写入成功 这可以通过acks 1来保证 保证所有ISR的副本都是一致的 即一条
  • CSP 202212-1 现值计算

    答题 主要就是 include
  • “无法从静态上下文中引用非静态变量,非静态方法”原因及解决

    1 原因 1 用static修饰的方法为静态方法 修饰变量则为静态变量 又分别叫做类方法或者类变量 这些从属于类 是类本身具备的 没有实例也会存在 2 而非静态方法和变量的存在依赖于对象 是对象的属性 需要先创建实例对象 然后通过对象调用
  • ★SQL注入漏洞(7)SQL注入高级篇

    分析目标防火墙并且跳过 1 直接拉黑ip类防火墙 2 过滤删除相应字符的防火墙 1 waf注释符号过滤 例题 Sqli labs T23 特点 注释符 被过滤掉了 绕过方法 逻辑上补全闭合即可 多加一次url编码只是更安全的绕过 selec
  • Redis系列1——数据类型和常用数据操作

    一 redis基础知识 客户端和服务器命令 默认端口号6379 服务器命令 redis server redis windows conf 设置服务一直开启 首先进入redis安装目录 然后执行 redis server service i
  • android so 调试

    安卓调试 环境 tool JDK 8X 之前用15版本的 monitor一直无法启动 链接 https pan baidu com s 12LUwB7ZOVEcblAzkO8hxyA 提取码 5lw0 monitor bat 流程 开启调试
  • mybatis学习笔记8:注解开发

    文章目录 一 基于注解的开发环境搭建以及实现查询所有 1 定义主配置文件 2 准备实体类和Dao接口 3 Dao接口定义findAll方法 以及添加注解 4 测试类定义方法测试 5 注解开发和基于xml的映射配置文件开发对比 6 注解开发的
  • 数据结构练习题——图(含应用题)

    1 选择题 1 在一个图中 所有顶点的度数之和等于图的边数的 倍 A 1 2 B 1 C 2 D 4 答案 C 2 在一个有向图中 所有顶点的入度之和等于所有顶点的出度之和的 倍 A 1 2 B 1 C 2 D 4 答案 B 解释 有向图所
  • 黄聪:微信小程序 服务器 TLS1.0 1TLS.2 配置详细教学!

    下载IISCrypto exe 点击best 工具自动推荐选中 也可以定义勾选 选择配置完成 然后点击 apply 软件弹窗提醒你 手动重启服务器 重启服务器 搞定 最后 https www ssllabs com ssltest inde
  • Linux与windows文件上传和下载

    在没有安装第三方工具的帮助下 能不能直接完成上传一个文件给服务器上 或者从服务器上下载一个文件下来 当然是可以的 你可以通过rz和sz来完成在自己的windows上上传一个文件给服务器 或者直接从服务器下载一个文件 首先第一步使用rz和sz
  • 三种SQL实现聚合字段合并(presto、hive、mysql)

    需求 按照项目名 以逗号合并参与人 presto select item name array join array agg name as group name from test test 04 group by item name o
  • Java版企业电子招标采购系统源代码Spring Boot + 二次开发 + 前后端分离 构建企业电子招采平台之立项流程图

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • swagger注解之@ApiOperation

    swagger注解之 ApiOperation 链接 swagger学习一 链接 swagger学习二 ApiOperation 用于方法 表示一个http请求的操作 ApiOperation value 接口说明 httpMethod 接
  • 【Linux】Argument list too long参数列表过长的办法-四种

    1 背景 Linux下使用cp mv rm chmod等命令时经常会碰到 Argument list too long 错误 这主要是因为这些命令的参数太长 即文件个数过多 2 解决方案 方案一 将文件群手动划分为比较小的组合 user l