如何批量重命名损坏的文件扩展名?

Posted

技术标签:

【中文标题】如何批量重命名损坏的文件扩展名?【英文标题】:How to rename corrupted file extensions in bulk? 【发布时间】:2019-07-05 08:32:26 【问题描述】:

对于工作,我每周都会自动生成一份报告(由工程师而非我编写),其中包含各种文档。它们都是 .docx,但在任何给定的报告中,大约有一半返回为“.docx[RANDOM CHARACTERS]”,导致它们无法打开,直到我手动修复每个文件的文件扩展名。我已经看到如何批量重命名文件(例如“.txt to .docx”),但是有没有办法使用终端来明确更改文件夹中所有文件的扩展名?

试过这段代码:

for file in *.docx*; do mv "$file" "$file%.docx.docx"; done

这会将“.docx”添加到每个文件名的末尾,但并未删除所有随机字符。

理想情况下,它将用“.docx”替换“.docx[RANDOM CHARACTERS]”,同时不理会其他“.docx”文件。

【问题讨论】:

【参考方案1】:

你是如此,如此接近。您的$file%.docx 表达式在.docx 模式的末尾缺少** 将匹配(然后删除).docx 字符串后面的任何其他字符。应该是这样的:

  for file in *.docx* ; do mv "$file" "$file%.docx*.docx" ; done

您可以通过仅选择名称在.docx 字符串后至少包含一个字符的文件来稍微提高命令的效率,如下所示:

  for file in *.docx?* ; do mv "$file" "$file%.docx*.docx" ; done

如果没有 ?,该命令将匹配并重命名现有的 .docx 文件,使其具有与它们已有的名称相同的名称。这是无害的,但效率低下。

很明显,如果存在重命名会破坏现有文件的危险(例如,您有名为 abc.docxabc.docx2 的文件)或者两个重命名会发生冲突(例如,您有名为 xyz.docx1xyz.docx2 的文件)那么你将不得不做一些更精细的事情。使用mv -nv 而不是普通的mv 将是一种防止这些冲突的简单方法。

【讨论】:

以上是关于如何批量重命名损坏的文件扩展名?的主要内容,如果未能解决你的问题,请参考以下文章

递归批量重命名文件扩展名(Windows批处理)

批量重命名具有不同扩展名Linux脚本的多个文件?

批处理:批量重命名父文件夹下所有子文件夹里的文件

文件批量重命名 如1-2 3-4 5-6

如何以照片的拍摄时间批量重命名文件

如何批量重命名文件夹下的Excel文件