首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >unix/macos --如何找到具有不同扩展名的所有文件和副本

unix/macos --如何找到具有不同扩展名的所有文件和副本
EN

Stack Overflow用户
提问于 2018-09-13 02:12:06
回答 2查看 291关注 0票数 0

因此,我想抓取所有特定的文件,然后在相同的文件夹/位置复制它们,但扩展名不同。到目前为止,我从另一个问题Copy all files with a certain extension from all subdirectories得到了这个

代码语言:javascript
运行
复制
find . -name \*.js -exec cp {} newDir \;

我希望将所有这些.js文件复制到.ts中,例如,复制functions.jsfunctions.ts中的任何位置。

更多的例子:

代码语言:javascript
运行
复制
a/functions.js
b/test.js
c/another.js
index.js

代码语言:javascript
运行
复制
a/functions.ts
b/test.ts
c/another.ts
index.ts
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-13 03:08:26

代码语言:javascript
运行
复制
find . -name \*.js | while read jsfile; do cp "${jsfile}" "${jsfile%.js}.ts"; done
  1. find . -name \*.js列出所有.js文件
  2. 使用read命令从fine命令的输出中读取每一行。
  3. ${jsfile%.js}意味着从变量jsfile中删除.js后缀,例如,a/functions.js将变为a/functions
票数 2
EN

Stack Overflow用户

发布于 2018-09-13 02:54:54

下面是如何使用findxargs分配变量并打开所有类型的命令行选项,

代码语言:javascript
运行
复制
$ find . -name '*.js' | xargs -I {} bash -c 'p="{}"; cp $p newDir/$(basename ${p%.js}.ts)'

使用xargs -I {}find的输出作为xargs的输入。使用bash -c执行命令。

下面是一个演示:

代码语言:javascript
运行
复制
$ 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命令并删除newDirbasename

代码语言:javascript
运行
复制
$ find . -name '*.js' | xargs -I {} bash -c 'p="{}"; cp $p ${p%.js}.ts'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52305714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档