将具有特定扩展名的所有文件复制到另一个目录,同时更改扩展名

时间:2015-04-07 12:45:16

标签: linux bash shell grep cut

我想将目录aaa中扩展名为a的所有文件复制到目录b,将扩展名替换为bbb。我试着做这样的事情:

ls a | grep \.bla$ | cut --delimiter=. -f 1 | xargs cp a/{}.aaa b/{}.bbb

但它真的很糟糕。我想要一个oneliner,而不是一个bash脚本。

2 个答案:

答案 0 :(得分:4)

我认为你使问题有点过于复杂,如果目标目录为空,你可以使用以下单行来执行此操作:

cp a/*.aaa b; rename 's/aaa$/bbb/' b/*.aaa

该脚本使用两个命令,其间有;,以便在第一个命令之后执行第二个命令。

cp a/*.aaa b

将具有模式a/*.aaa的所有文件复制到b目录。通过单次调用执行此操作,该命令也将比使用管道更有效。

下一个rename是一个实用程序工具,用于对文件名执行正则表达式查找和替换。通过指定b/*.aaa,您将使用b正则表达式重命名*.aaa中的所有文件。现在你只需要指定要替换的内容,这是使用正则表达式完成的:

s/aaa$/bbb/

aaa$表示最后三个字符必须为aaa,并为每个文件替换为bbb

答案 1 :(得分:2)

另一种方式

cp -r a/ b/;for i in b/*; do mv {$i%.aaa}{.aaa,.bbb};done