linux - 将具有特定扩展名的所有文件复制到另一个目录,同时更改扩展名

标签 linux bash shell grep cut

我想将所有扩展名为aaa的文件从目录a复制到目录b,将扩展名替换为bbb。我试图做这样的事情:

ls a | grep \.bla$ | cut --delimiter=. -f 1 | xargs cp a/{}.aaa b/{}.bbb

但它真的关闭了。我想要一个 oneliner,而不是 bash 脚本。

最佳答案

我觉得你把问题弄得太复杂了,如果目标目录是空的,你可以用下面的one-liner来做到这一点:

cp a/*.aaa b; rename 's/aaa$/bbb/' b/*.aaa

该脚本使用两个命令,中间有一个 ; 以在第一个之后执行第二个。

cp a/*.aaa b

将模式为a/*.aaa 的所有文件复制到b 目录。通过一次调用执行此操作,该命令也将比使用管道更有效。

Next rename 是一个实用工具,用于对文件名执行正则表达式查找和替换。通过指定 b/*.aaa,您将使用 *.aaa 正则表达式重命名 b 中的所有文件。现在您只需要指定要替换的内容,这是通过正则表达式完成的:

s/aaa$/bbb/

aaa$ 表示最后三个字符必须是 aaa 并且您将它们替换为每个文件的 bbb

关于linux - 将具有特定扩展名的所有文件复制到另一个目录,同时更改扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29491953/

相关文章:

.net - 我们可以将 mono 捆绑在我们的安装包中吗?

c++ - 减少 boost build 中的内存使用

c++ - 如何检查大型 C++ Linux 应用程序中的内存泄漏?

linux - 从 sudo-ed 环境启动 bash shell

linux - F5 负载均衡器交互

arrays - bash:如何使用一个数组创建另一个数组?

shell - 用 sed 替换子字符串

unix - 在unix shell中,如何将昨天的日期放入变量中?

linux - 如何将内存从进程返回给操作系统

bash - 如何在 Bash 中将 local 与 set -o errexit 结合使用?