2013-02-19 93 views

回答

5

而是执行此操作:

for x in *; do 
    cp "$x" "${x/./_holo_light.}" 
    cp "$x" "${x/./_holo_dark.}" 
done 
3

为什么不干脆:

ls | sed 's/a/c/g' 
+0

我更新了我的问题所取代。我不仅需要打印文件,而且需要重命名多个文件。 – 2013-02-19 08:56:53

+1

@hongbosb不要问一个问题,然后编辑它来问一个不同的问题!看到dogbane对你实际想问的问题的回答。 – 2013-02-19 09:05:42

+0

对不起,我的错。 – 2013-02-19 10:04:07

1

注意,从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的输出。

+0

+1如果您将引号添加到文件名,使用ls应该没有问题。 – 2013-02-19 11:46:59

+0

@OlafDietsche:是的,我同意这会缓解一些问题,补充并感谢你。 – Thor 2013-02-19 11:53:49

0

虽然这里提到的答案是正确的&优化,
为您的原始问题文本,“模拟标准输入”,您可以在这里使用字符串。

echo "$var" | command 

可以

command <<< "$var" 
+0

该功能称为“此处字符串”,而不是变量替换。 – chepner 2013-02-19 13:26:12

+0

err ..是...... – anishsane 2013-02-19 14:19:42

相关问题