将具有特定扩展名的所有文件复制到另一个目录,同时更改扩展名
Copy all files with certain extension to another directory, while changing the extension
我想将所有扩展名为 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
。
另一种方式
cp -r a/ b/;for i in b/*; do mv {$i%.aaa}{.aaa,.bbb};done
我想将所有扩展名为 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
。
另一种方式
cp -r a/ b/;for i in b/*; do mv {$i%.aaa}{.aaa,.bbb};done