如何批量重命名损坏的文件扩展名?
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.docx
和 abc.docx2
的文件)或者两个重命名会发生冲突(例如,您有名为 xyz.docx1
和 xyz.docx2
的文件)那么你将不得不做一些更精细的事情。使用mv -nv
而不是普通的mv
将是一种防止这些冲突的简单方法。
【讨论】:
以上是关于如何批量重命名损坏的文件扩展名?的主要内容,如果未能解决你的问题,请参考以下文章