我正在寻找一种方法来递归查找扩展名为 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 复制;使用 find、xargs 和 cpio。
就目前情况来看,运行重命名脚本脚本如下this http://www.debianadmin.com/rename-multiple-files-to-another-extension-in-linux.html这就是我最终要做的。
find . -name "*.js" -exec bash -c 'name="{}"; cp "$name" "${name%.js}.ts"' \;
Using find http://pubs.opengroup.org/onlinepubs/007908799/xcu/find.html,您可以直接对找到的文件执行命令,方法是使用-exec
选项;您不需要通过 xargs 通过管道传输它。它采用命令名称,后跟命令的参数,后跟单个参数;
,你必须转义以避免 shell 解释它。find
将取代任何出现的{}
在命令名称或参数中找到找到的文件。
为了调用一个带有适当结尾的命令,您可以采取多种方法,但一种简单的方法是使用 Bash 的参数扩展 http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion。您需要定义一个包含名称的 shell 参数(在本例中,我创造性地选择了name={}
),然后就可以对其进行参数扩展了。${variable%suffix}
剥去suffix
从价值$variable
;然后我添加.ts
到最后,并得到我正在寻找的名字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)