如何使用mv命令来重命名unix中的多个文件?

我想重命名扩展名为xyz[n]的扩展名为xyz多个文件

例如:

 mv *.xyz[1] to *.xyz 

但错误来了 – " *.xyz No such file or directory"

不知道如果MV可以直接使用*,但这将工作

 find ./ -name "*.xyz\[*\]" | while read line do mv "$line" ${line%.*}.xyz done 

假设我们有一些文件,如下所示。现在我想从这些文件中删除部分 – (ab …)。

 > ls -1 foo* foo-bar-(ab-4529111094).txt foo-bar-foo-bar-(ab-189534).txt foo-bar-foo-bar-bar-(ab-24937932201).txt 

所以预期的文件名将是:

 > ls -1 foo* foo-bar-foo-bar-bar.txt foo-bar-foo-bar.txt foo-bar.txt > 

下面是一个简单的方法来做到这一点。

 > ls -1 | nawk '/foo-bar-/{old=$0;gsub(/-\(.*\)/,"",$0);system("mv \""old"\" "$0)}' 

详细的解释在这里检查

这是另一种使用StringSolver自动化工具的方法 。 假设你的第一个文件名为abc.xyz[1] ,第二个文件名为def.xyz[1] ,第三个文件名为ghi.jpg (与前两个文件不一样)。

首先,通过给出的例子来过滤你想要的文件(ok和notok是第一个描述接受的文件的任何词):

 filter abc.xyz[1] ok def.xyz[1] ok ghi.jpg notok 

然后用它创建的过滤器执行移动:

 mv abc.xyz[1] abc.xyz mv --filter --all 

第二行概括了以.xyz[1]结尾的所有文件的第一次转换。

最后两行也可以缩写为一个,它执行移动并立即将其推广:

 mv --filter --all abc.xyz[1] abc.xyz 

免责声明:我是这项工作的学术目的的合着者。 其他例子在youtube上可用。