Bash:使用扩展名为目录中的所有文件添加后缀

时间:2014-07-06 03:01:31

标签: bash

我想为当前目录中的所有文件添加后缀。

这是我迄今为止从搜索stackoverflow和Google(以及一些乱七八糟的东西)到目前为止所得到的,但它一直在失败。我想将字符串3.6.16附加到我目录中的所有.png文件中。我可以做前缀部分但我的后缀失败(我猜是因为扩展名)。

使用bash:

for item in *.png; do mv "$file" "${file}_3.6.14.png"; done

3 个答案:

答案 0 :(得分:26)

for file in *.png; do
    mv "$file" "${file%.png}_3.6.14.png"
done
删除${file%.png}后缀后,

${file}扩展为.png

答案 1 :(得分:10)

您可以通过重命名命令

来完成此操作
rename 's/\.png/_3.6.14.png/' *.png

通过bash,

for i in *.png; do mv "$i" "${i%.*}_3.6.14.png"; done

它会将所有.png个文件中的.png替换为_3.6.14.png

  • ${i%.*}最后一点之后的任何事情都会被削减。因此,.png部分将从文件名中截止。
  • mv $i ${i%.*}_3.6.14.png使用文件名+ _3.6.14.png重命名原始.png文件。

答案 2 :(得分:0)

如果您熟悉正则表达式 sed 非常好。

a) 根据自己的喜好修改正则表达式并检查输出

ls | sed -E "s/(.*)\.png$/\1_foo\.png/

b) 添加 p 标志,以便 sed 为您提供旧路径和新路径。使用 -n2 将其提供给 xargs,这意味着它应该保持 2 个参数的配对。

ls | sed -E "p;s/(.*)\.png/\1_foo\.png/" | xargs -n2 mv