bash重命名前缀为序列号的文件

时间:2013-06-30 03:26:05

标签: bash

我在文件夹中有大量文件。我想做两件事:

  1. 用xxx三位序列号作为前缀 - 升序:001 002依旧
  2. 从名称中删除前缀,因此001a.xyz = a.xyz
  3. 我打算使用简单的bash脚本执行此操作。什么是最优雅,最简单易懂的方法?

    修改

    文件在可移动设备上,我似乎无法在设备上的脚本上设置chmod + X.那么如何从我的主目录运行一个脚本来改变另一个目录中的文件呢?

2 个答案:

答案 0 :(得分:4)

添加前缀:

counter=1
for f in *; do
  printf -v prefix_str '%03d' "$((counter++))"
  mv "$f" "${prefix_str}$f"
done

删除前缀(注意 - 如果您有两个具有相同后缀但前缀不同的文件,则可能会覆盖):

for f in [0-9][0-9][0-9]*; do
  mv "$f" "${f:3}"
done

当两个文件具有相同的后缀时,使用mv -n来避免覆盖。

答案 1 :(得分:1)

这应该有效:

#!/bin/bash

count=1
for file in *; do
  if [[ $file =~ [0-9][0-9][0-9].* ]]; then
    sfile="${file:3}"
    new=$(printf "%03d" ${count}) 
    mv "$file" "${new}${sfile}"
    ((count++))
  else
    new=$(printf "%03d" ${count})
    mv "$file" "${new}${file}"
    ((count++))
  fi
done

此脚本的作用是检查当前目录中的给定文件。如果文件已经有前缀,它将删除它并分配一个新的顺序前缀。如果文件没有前缀,它将为其添加一个顺序前缀。

最终结果应该是,当前目录中的所有文件(一些带有前缀和一些没有前缀)将具有新的顺序前缀。