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

时间:2012-12-20 07:55:33

标签: unix command rename mv

我正在尝试将扩展名为xyz[n]的多个文件重命名为扩展程序xyz

示例:

mv *.xyz[1] to *.xyz

但错误来自 - " *.xyz No such file or directory"

4 个答案:

答案 0 :(得分:5)

不知道mv是否可以直接使用*但这可行

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

答案 1 :(得分:2)

假设我们有一些文件如下所示。现在我想从这些文件中删除部分 - (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)}'

详细说明检查here

答案 2 :(得分: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上找到。

答案 3 :(得分:0)

我认为mv无法在没有循环的情况下直接对多个文件进行操作。 请改用rename命令。它使用正则表达式,但一旦掌握并且功能更强大就易于使用。

rename 's/^text-to-replace/new-text-you-want/' text-to-replace*

例如,将目录中的所有.jar文件重命名为.jar_bak

rename 's/^jar/jar_bak/' jar*