如何删除句点之间的部分文件名?

How to remove part of file names between periods?

我想重命名很多这种格式的文件

abc.123.fits
abcd.1234.fits
efg.12.fits

到这个格式

abc.fits
abcd.fits
efg.fits

我尝试了重命名功能,但由于我要替换的部分在所有文件中都不相同,所以它没有用。我正在使用 Linux.

for f in *; do mv "$f" "${f%%.*}.${f##*.}"; done`

${f%%.*} 删除第一个句点之后的所有内容,包括句点。 ${f##*.} 删除最后一个句点之前的所有内容,包括句点(即它获取文件扩展名)。将这两个连接起来,在它们之间加上一个句点,可以得到你想要的结果。

如果您不想重命名当前目录中的所有文件,您可以将 * 更改为更严格的模式,例如 *.fits。如果任何文件名包含空格,mv 参数周围的引号是必需的。

bash中还有许多其他变量替换表达式可用;有关详细信息,请参阅 TLDP's Bash Parameter Substitution 等参考资料。