linux下ls mv命令参数列表过长的解决办法
四种解决”bash: /bin/mv: Argument list too long”参数列表过长的办法 
linux用户/系统管理员, 有些时候 遇到以下错误提示:
  [user@localhost linux]$ mv * ../foo2
bash: /bin/mv: Argument list too long
  方法1 : 将文件手动划分为比较小的组合
[user@localhost foo]$ mv [a-l]* ../foo2
[user@localhost foo]$ mv [m-z]* ../foo2
方法2
1、在一个目录下删除大批量的文件时,当使用 rm -rf 或者rm *会提示参数列表过长
通过修改命令为 :find . -name "*" | xargs rm -rf '*',成功删除
2、需要把一个目录下的所有文件mv到另外一个目录,如果当前目录文件特别多,简单使用mv 源目录 目的目录会提示参数列表过长
通过修改命令为 :ls | xargs -t -I {} mv {} ../matchres/ 可以把当前目录下的所有文件移到 "../matchres"
3、另外cp 命令也会存在这种情况,解决办法跟 mv的一样
实际操作整理:
1、把 hbtmp 目录下文件 mv 201301目录下
find hbtmp -type f -name '' |xargs -t -I {} mv {} 201301/
2、合并201301目录文件到
cd 201301/
ls | xargs -t -I {} cat {} >> ../
find hbtmp -type f -name '' -exec mv {} 201301/.\; 提示exec缺少参数
[user@localhost foo]$ find $test2 -type f -name '*' -exec mv {} $test1/. \;
[user@localhost foo]$ find $test2 -type f -name '*' -exec mv {} $test1/. \
方法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 arguments
* and envelope for the new program. 32 should suffice, this gives如何下载mv
* a maximum env+arg of 128kB w/4KB pages!
*/
#define MAX_ARG_PAGES 32
修改 MAX_ARG_PAGES数值为 64 或者更高即可完善的解决参数受限问题。
然后 重新编译并启用新内核即可
Notes : 以上全部测试通过,基于bash

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。