Linux的/ Cygwin的递归复制文件扩展名的变化[关闭](Linux/Cygwin recur

2019-08-01 13:42发布

我正在寻找一种方式来递归地找到扩展X(.js文件)的文件,使文件的副本与扩展Y(.TS)的同一目录下

如/foo/bar/foobar.js - > /foo/bar/foobar.js和/foo/bar/foobar.ts

/foo/bar.js - > /foo/bar.js和/foo/bar.ts等等等等

我的尽职调查:我想用find及xargs的&CP和括号扩展的( cp foobar.{js,ts}但xargs的使用括号来表示从xargs的传递文件的列表)。 这让我伤心,因为我刚刚发现了真棒酱是括号扩展/替换。

我觉得必须有一个在线解决方案,但我竭力拿出一个。

我发现的想法执行任务:复制需要一个新的目录,然后在这个目录用新的合并; 递归运行在每个目录重命名脚本; 复制使用rsync; 使用查找,xargs的和cpio。

按照现在的情况看来,运行就像一个重命名脚本脚本这是我最终会做的事情。

Answer 1:

find . -name "*.js" -exec bash -c 'name="{}"; cp "$name" "${name%.js}.ts"' \;

使用find ,你可以在你已经发现,通过使用一个文件直接执行命令-exec选项; 你不把它通过xargs的需要管。 它需要的命令名,接着参数的命令,随后一个参数; ,你必须逃离以避免外壳解释它。 find将取代任何发生{}在命令名称或论点找到该文件。

为了调用具有取代适当的结局命令,还有你可以采取多种方法,但一个简单的一种是使用bash的参数扩展 。 您需要定义一个包含名称的shell参数(在这种情况下,我选择了创造性的name={}然后你可以使用它的参数扩展。 ${variable%suffix}剥去suffix从的值$variable ; 然后我就加.ts到最后,并有我要找的名称。



文章来源: Linux/Cygwin recursively copy file change extension [closed]