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

Posted

技术标签:

【中文标题】如何使用 mv 命令重命名 unix 中的多个文件?【英文标题】:How to use mv command to rename multiple files in unix? 【发布时间】:2012-12-07 16:50:25 【问题描述】:

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

例子:

mv *.xyz[1] to *.xyz

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

【问题讨论】:

此命令试图将 *.xyz[1] 移动到目录 *.xyz (如果我们忽略中间的“to”,这是无效的:)。这就是为什么它不起作用。您需要一些脚本来执行此操作。 文件扩展名有[]。你确定吗? 感谢大家的回复 @Damien 但简单的 mv abc.xyz[1] abc.xyz 正在工作 @theharshest:是的,我确定扩展名只是这个 【参考方案1】:

不知道 mv 是否可以直接使用 * 工作,但这会工作

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

【讨论】:

【参考方案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

【讨论】:

感谢 Sarathi 的回复当我在终端上触发命令时,我收到错误,因为找不到 nawk 命令 确切的 O/P 是“-bash: nawk: command not found” 然后我尝试使用 awk 命令作为 ls -1 |awk '/110X/old=$0;gsub(/[/,"",$0);system("mv \""old"\" "$0)' 我得到了错误“ awk : nonterminated character class [ source line number 1 context is >>> /110X/old=$0;gsub(/[/,"",$0) " 我的文件名类似于 20130110X1YZ.rtf[2] 20130110XYZ.rtf[1] 20130110XYZ1.rtf[2] 我想从 20130110X1YZ.rtf 之类的名称中删除 [n] 值 20130110X1YZ .rtf[2] 您可以尝试使用 awk 而不是我在 solaris 上使用的 nawk.nawk。所以它在 solaris 上有效。【参考方案3】:

这是使用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 上提供了其他示例。

【讨论】:

【参考方案4】:

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

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

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

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

【讨论】:

以上是关于如何使用 mv 命令重命名 unix 中的多个文件?的主要内容,如果未能解决你的问题,请参考以下文章

在linux下复制文件到另外一个目录并且重命名的具体操作如何?

UNIX 命令 mv 和 rm 如何处理打开的文件?

为啥linux无法重命名文件

重命名文件或文件夹(mv命令与rename命令)

Linux 移动或重命名文件/目录-mv 的10个实用例子

Linux 使用 mv 命令重命名或移动文件