繁体   English   中英

Bash 脚本将常量添加到文件名

[英]Bash script to add constant to file names

我需要一个 bash 脚本来重命名目录中的文件。 名称的格式为<name>_<number> (例如bob_12alice_233 )。 脚本必须将它们更改为<name>_<number+k> (例如,如果 k=20, bob_32alice_253 )。 有人可以帮忙吗?

$ ls
alice_253  bob_32
$ k=20
$ for old in *; do new=${old%_*}_$((${old#*_}+k)); mv "$old" "$new"; done
$ ls
alice_273  bob_52

这只是一个例子。 如果存在名称具有以下内容的文件,它将无法正常工作:

  • dash 作为第一个字符,
  • 任何数量的下划线,但一个,
  • 下划线右侧的非数字字符,
  • 紧跟下划线的零。

如果我们也想涵盖这些情况,假设文件名可能不重叠(例如foo_100foo_120k=20 ,在这种情况下我们需要先以相反的顺序对它们进行排序),我们会这样做:

# handle -foo_123
# skip foo, foo_bar, foo_012,
# and foo_bar_123
k=20
for old in ./*_*; do
  case $old in
    (*_*_*) ;&
    (*_*[!0-9]*) ;&
    (*_0*) continue
  esac
  new=${old%_*}_$((${old#*_}+k))
  mv "$old" "$new"
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM