今天下午我只写了一个bash脚本。这很丑陋。所以我认为在这里必须有更好的方法来实施echo $x
。有没有更好的方法来模拟标准输入?
for x in $(ls); do
cp $x $(echo $x | sed s/\\./_holo_light./)
cp $x $(echo $x | sed s/\\./_holo_dark./)
done
今天下午我只写了一个bash脚本。这很丑陋。所以我认为在这里必须有更好的方法来实施echo $x
。有没有更好的方法来模拟标准输入?
for x in $(ls); do
cp $x $(echo $x | sed s/\\./_holo_light./)
cp $x $(echo $x | sed s/\\./_holo_dark./)
done
而是执行此操作:
for x in *; do
cp "$x" "${x/./_holo_light.}"
cp "$x" "${x/./_holo_dark.}"
done
ls
。改用glob。sed
。 Bash可以执行string manipulation。为什么不干脆:
ls | sed 's/a/c/g'
注意,从LS解析输出有some issues,如果你确信你没有影响,你可以做这样的(GNU SED):
ls |
sed -nr 's/(.*)\.(.*)$/cp "\1.\2" "\1_holo_light.\2"\ncp "\1.\2" "\1_halo_dark.\2"/p' |
sh
虽然sed产生的复制命令其然后通过一个shell来执行。在追加| sh
之前查看sed的输出。
+1如果您将引号添加到文件名,使用ls应该没有问题。 – 2013-02-19 11:46:59
@OlafDietsche:是的,我同意这会缓解一些问题,补充并感谢你。 – Thor 2013-02-19 11:53:49
我更新了我的问题所取代。我不仅需要打印文件,而且需要重命名多个文件。 – 2013-02-19 08:56:53
@hongbosb不要问一个问题,然后编辑它来问一个不同的问题!看到dogbane对你实际想问的问题的回答。 – 2013-02-19 09:05:42
对不起,我的错。 – 2013-02-19 10:04:07