1

我在一个文件夹中有很多文件。我想做两件事:

  1. 在它们前面加上 xxx 三位数的序列号 - 升序:001 002 等等
  2. 从他们的名字中删除前缀,所以 001a.xyz = a.xyz

我打算使用一个简单的 bash 脚本来做到这一点。最优雅和最容易理解的方法是什么?

编辑

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

4

2 回答 2

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避免覆盖。

于 2013-06-30T03:30:18.610 回答
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

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

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

于 2013-06-30T04:35:16.943 回答