如下脚本
#!/bin/bash
ls /data/pic/*
如果/data/pic目录下的文件过多,那么上述正则*号会扩展出所有满足条件的文件作为ls的参数
类似于执行
ls /data/pic/f1 /data/pic/f2 /data/pic/f3 /data/pic/f4 ....
这样在脚本中,会导致ls命令的参数过多而报错
/bin/ls: Argument list too long
但是奇怪的是,如果不在脚本中执行,而在命令行中执行却没有问题
而且,如果脚本中用
ls /data/pic/"*"
会报如下错误,找不到文件
ls: cannot access /data/pic/*: No such file or directory
原因是*号不能放在双引号""中
不光是ls命令,其他所有的命令如果用到*号的话,都会存在如上的两个问题
如果我现在想移动大批量的文件到另外一个目录下,用mv命令,该怎么做呢?
解决办法就是用xargs来绕过这个限制
#!/bin/bash
ls /data/pic | xargs -I {} mv /data/pic/{} /data/image