从文件名中删除重复的点

从文件名中删除重复的点

我有一个目录,里面有大量的文件,这些文件的命名格式不正确,例如file..txtfile2..txt等等......

那么如何轻松地.从文件名中删除第二个呢?

任何适用的方法都值得赞赏,包括 awk、sed、grep 等......

答案1

使用rename(根据 heemayl 的建议,我将通配符范围缩小到以 结尾的文件名..txt):

rename -n 's/(.*)\./$1/' *..txt

这将匹配文件名直到最后一个点,并用除最后一个点之外的所有内容替换匹配项。

如果结果是预期的,请删除该-n选项:

rename 's/(.*)\./$1/' *..txt

答案2

另一个rename变体:

rename 's/\Q.././' *..txt

使用\Q避免转义点(参见http://perldoc.perl.org/perlretut.html

答案3

我有一个可行的解决方案,并且仍在努力实现更好的解决方案:

for f in *; do mv $f ${f%.txt}txt; done

多亏了@heemayl笔记:

不要使用 *,而要使用 *..txt 来获取文件,因为当您有任何文件没有 . 并且只有一个时,只有 * 会导致问题

因此变成:

for f in *..txt; do mv $f ${f%.txt}txt; done

答案4

执行此操作的最简单方法是在包含上述格式的文件名的目录中运行以下命令

rename 's/\.+txt/\.txt/' *

相关内容