重命名文件夹中的所有文件,以便删除两个相同字符之间的文本

重命名文件夹中的所有文件,以便删除两个相同字符之间的文本

我的文件夹中有大量文件,其名称如下:

abc.test.txt
edf.main.txt
num2.tb.doc
file3.map.csv
file4.test.csv

我希望这些文件被重命名,以便.删除之间的文本,并且上面的文件被重命名如下:

abc.txt
edf.txt
num2.doc
file3.csv
file4.csv

这可能吗?

我发现了类似的东西,但不能满足我的需要。

如何通过删除字符或字符串来重命名多个文件?

答案1

在 zsh 中,使用zmv。运行autoload -U zmv或将其放入您的 ``/.zshrc` 中,然后

zmv '(*).*(.*)' '$1$2'

或者

zmv -w '*.*.*' '$1.$3'

或者,如果您有以下prename命令(将表达式应用于每个文件名的 Perl 脚本):

prename 's/\..*\././' *.*.*

仅使用每个 POSIX 系统上可用的工具,使用 shell环形, 和参数扩展提取名称的部分。

for x in *.*.*; do
  mv -- "$x" "${x%.*.*}.${x##*.}"
done

答案2

使用 perl 重命名实用程序:

prename 's/\.[^.]*\././' *

prename允许您使用 perl 表达式重命名文件。

在某些系统上,相同的程序被调用rename而不是(或以及)prename。还有一些其他程序的rename工作方式非常不同 - 检查rename系统上的手册页以确保确定。

例如,默认情况下,rename在 Debian 系统上是一个符号链接prename(通过/etc/alternatives系统)。其他发行版可能有所不同。

Debian 还有一个名为 的软件包,其中包含名为rename的增强版本。这是同一脚本的更新版本。它在替代方案中具有更高的优先级,因此安装该包会将符号链接更改为.prenamefile-renamerenamefile-rename

答案3

这应该照顾好它

for file in $(find ./)
do
  newname=$(echo ${file} | sed -e 's/\.\(.*\)\././')
  mv ${file} ${newname}
done

相关内容