LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1469|回复: 10

通配符*的问题

[复制链接]
发表于 2007-8-16 03:09:14 | 显示全部楼层 |阅读模式
比如某个文件下有20000个文件,文件格式为rec00001.tar.bz2 rec00002.tar.bz2 ... rec20000.tar.bz2。在移动这些文件到另一文件夹时出现问题:
  1. $ mv rec*.bz2 ../old_files
  2. -bash: /bin/mv: Argument list too long
复制代码

看来是通配符展开太长了,mv不支持?只能用以下办法解决:
  1. for i in rec*.bz2;do
  2.       mv $i ../old_files;
  3. done
复制代码

但是毕竟复杂了点,有人知道上面的问题怎么回事么?
发表于 2007-8-16 08:56:26 | 显示全部楼层
shell下命令的参数是有长度限制的。
回复 支持 反对

使用道具 举报

发表于 2007-8-16 10:51:47 | 显示全部楼层
mv rec0*.bz2 ../old_files
mv rec1*.bz2 ../old_files
mv rec2*.bz2 ../old_files
如果还不行,继续分。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-16 15:46:15 | 显示全部楼层
呵呵,那还不如这样呢

  1. for i in rec*.bz2;do
  2.       mv $i ../old_files;
  3. done
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-8-17 22:22:31 | 显示全部楼层
ls rec*.bz2 | xargs mv {} ../old_files
xargs是专门用来解决命令行长度问题的
回复 支持 反对

使用道具 举报

发表于 2007-8-18 17:14:11 | 显示全部楼层
32位Linux可能是32768个位置参数

曾见configure的输出
  1. checking the maximum length of command line arguments... 32768
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-8-18 17:53:09 | 显示全部楼层
Post by huan
32位Linux可能是32768个位置参数

曾见configure的输出
  1. checking the maximum length of command line arguments... 32768
复制代码

还是有限制的,如果文件数量超过32768呢??

有什么更好的解决办法没有
回复 支持 反对

使用道具 举报

发表于 2007-8-18 23:33:43 | 显示全部楼层
分段处理
或xargs
...
回复 支持 反对

使用道具 举报

发表于 2007-8-22 15:27:09 | 显示全部楼层
find . -name 'rec*.bz2' -type f -exec mv {} dst \;
回复 支持 反对

使用道具 举报

发表于 2007-8-22 15:42:04 | 显示全部楼层
Post by huan
32位Linux可能是32768个位置参数

曾见configure的输出
  1. checking the maximum length of command line arguments... 32768
复制代码
按字面意思是说的参数字符个数吧?
哦,可能是列表长度。
我测了一下,大概是21822个左右。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表