在shell脚本中使用*正则的问题

如下脚本
#!/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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值