当出现相同的输出文件名时,使用正则表达式递增重命名文件

时间:2017-03-22 20:06:02

标签: bash unix rename

我有一些文件:

tridiag_6_a.txt
tridiag_6_b.txt
tridiag_6_c.txt
gauss_6_a.txt
gauss_6_b.txt

我希望得到:

tridiag1.txt
tridiag2.txt
tridiag3.txt
gauss1.txt
gauss2.txt

我该怎么做? (Mac OS终端)我坚持:

 $ rename 's/^(.+?)_.*/$1$N.txt/g' *.txt

但是这会通过所有重命名递增。

1 个答案:

答案 0 :(得分:2)

使用Bash循环:

prev_prefix=""
count=1
for file in *.txt; do
  [[ -f "$file" ]] || continue
  prefix="${file/_*/}" # get all characters up to the first underscore
  if [[ "$prev_previx" != "$prefix" ]]; then
    count=1
    prev_prefix="$prefix"
  fi
  mv "$file" "$prefix$count".txt
  ((count++))
done