unix/macos - 如何找到所有文件并使用不同的扩展名复制到位
unix/macos - how to find all files and duplicate in place with a different extension
所以我想抓取所有特定文件,然后将它们复制到相同的 folder/location 但具有不同的扩展名。到目前为止,我从另一个问题 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
这里是如何使用 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
编辑(问题在初始 post 小时后更改)。要在同一目录中保留副本,请使用相同的 cp
命令并删除 newDir
和 basename
:
$ find . -name '*.js' | xargs -I {} bash -c 'p="{}"; cp $p ${p%.js}.ts'
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
所以我想抓取所有特定文件,然后将它们复制到相同的 folder/location 但具有不同的扩展名。到目前为止,我从另一个问题 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
这里是如何使用 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
编辑(问题在初始 post 小时后更改)。要在同一目录中保留副本,请使用相同的 cp
命令并删除 newDir
和 basename
:
$ find . -name '*.js' | xargs -I {} bash -c 'p="{}"; cp $p ${p%.js}.ts'
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