带输入和输出文件的单个重复命令

时间:2014-08-30 14:52:18

标签: regex linux bash command-line

我一直在尝试学习如何使用命令行多次充分执行单个命令。虽然我已经学会了如何在没有输入和输出文件的情况下执行单个命令,但是在需要这些命令时它会变得更加复杂。

cp命令需要这个,所以让我们以此为例。我查找扩展名为.png的所有图像并复制它们。我在使用谷歌后想出的方法是:

find -regex ".*\.\(png\)" -exec cp {} {}3 \;

唯一的问题是我必须使用名称后面的任何数字重命名文件,因此它会重命名为file.png3而不是file.png。我无法弄清楚如何做到不同,因为我不能把新的数字放在名称之前,因为它似乎不起作用。

有更好的方法可以做到这一点,还是我完全错误地采取行动?

1 个答案:

答案 0 :(得分:2)

我不确定如何在单个find命令中执行此操作,但您可以将其拆分。首先,找到带有find的文件。然后使用sed删除.png扩展名。最后,使用xargs在每个文件上运行复制功能。像这样:

find -regex ".*\.\(png\)" | sed -r 's/.png//g' | xargs -I {} cp {}.png {}_copy.png

如果您不知道,管道" |"将一个程序的输出发送到下一个程序。

或者,你可以修改文件名的开头(所以3img.png而不是img.png3)或复制到新文件夹。