因此,我想抓取所有特定的文件,然后在相同的文件夹/位置复制它们,但扩展名不同。到目前为止,我从另一个问题Copy all files with a certain extension from all subdirectories得到了这个
find . -name \*.js -exec cp {} newDir \;
我希望将所有这些.js
文件复制到.ts
中,例如,复制functions.js
到functions.ts
中的任何位置。
更多的例子:
a/functions.js
b/test.js
c/another.js
index.js
至
a/functions.ts
b/test.ts
c/another.ts
index.ts
发布于 2018-09-13 03:08:26
find . -name \*.js | while read jsfile; do cp "${jsfile}" "${jsfile%.js}.ts"; done
find . -name \*.js
列出所有.js
文件read
命令从fine
命令的输出中读取每一行。${jsfile%.js}
意味着从变量jsfile
中删除.js
后缀,例如,a/functions.js
将变为a/functions
发布于 2018-09-13 02:54:54
下面是如何使用find
和xargs
分配变量并打开所有类型的命令行选项,
$ find . -name '*.js' | xargs -I {} bash -c 'p="{}"; cp $p newDir/$(basename ${p%.js}.ts)'
使用xargs -I {}
将find
的输出作为xargs
的输入。使用bash -c
执行命令。
下面是一个演示:
$ mkdir -p a b c d newDir
$ touch a/1.js b/2.js c/three.js d/something.js
$ find . -name '*.js' | xargs -I {} bash -c 'p="{}"; cp $p newDir/$(basename ${p%.js}.ts)'
$ ls newDir/
1.ts 2.ts something.ts three.ts
编辑(问题在最初发布数小时后发生变化)。若要在同一个目录中保留副本,请使用相同的cp
命令并删除newDir
和basename
$ find . -name '*.js' | xargs -I {} bash -c 'p="{}"; cp $p ${p%.js}.ts'
https://stackoverflow.com/questions/52305714
复制相似问题