将文本添加到文件名末尾但扩展名之前

将文本添加到文件名末尾但扩展名之前

我有几个 mp3,需要在扩展名前添加“_p192”。

我试过这个:

for f in *.mp3; do printf '%s\n' "${f%.mp3}_p192.mp3"; done

继这篇文章之后:

在文件名扩展名之前添加文本

但它只是将文件名打印到标准输出,而没有实际重命名文件。

答案1

您查看的答案是针对一个问题,该问题并不要求实际重命名磁盘上的文件,而只是转换终端上报告的文件名称。

这意味着您的解决方案将起作用如果您使用该mv命令而不是printf(它只会将字符串打印到终端)。

for f in *.mp3; do mv -- "$f" "${f%.mp3}_p192.mp3"; done

我仍然建议您首先运行循环,printf以确保名称按照您期望的方式进行转换。

echo在 前面插入来查看将执行的内容通常是安全的(当您处理诸如,和 之mv类的潜在破坏性命令的循环时,这样做可能是一个好主意):mvcprm

for f in *.mp3; do echo mv -- "$f" "${f%.mp3}_p192.mp3"; done

或者,使用更好的格式:

for f in *.mp3; do
    echo mv -- "$f" "${f%.mp3}_p192.mp3"
done

答案2

您可以使用重命名命令。例如,要在文件扩展名之前添加文本“_p192”,您可以尝试:rename -n 's/(.*)\.mp3/$1_p192.mp3/' *.mp3.

上述命令将重命名当前目录中所有扩展名为 .mp3 的文件。该命令只会将重命名的文件打印到控制台。要实际重命名文件,请删除 -n 标志。

's' 修饰符表示替换。替换的第一部分是用于匹配文件名中的文本的正则表达式。第二部分是替换文本。重命名命令的最后一个参数是一个 glob 模式,用于指示要重命名哪些文件

相关内容