我在一个文件夹中有很多文件。我想做两件事:
- 在它们前面加上 xxx 三位数的序列号 - 升序:001 002 等等
- 从他们的名字中删除前缀,所以 001a.xyz = a.xyz
我打算使用一个简单的 bash 脚本来做到这一点。最优雅和最容易理解的方法是什么?
编辑
这些文件位于可移动设备上,我似乎无法在设备上的脚本上设置 chmod +X。那么如何从我的主目录运行脚本来更改另一个目录中的文件?
我在一个文件夹中有很多文件。我想做两件事:
我打算使用一个简单的 bash 脚本来做到这一点。最优雅和最容易理解的方法是什么?
编辑
这些文件位于可移动设备上,我似乎无法在设备上的脚本上设置 chmod +X。那么如何从我的主目录运行脚本来更改另一个目录中的文件?
添加前缀:
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
避免覆盖。
这应该有效:
#!/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
该脚本的作用是检查当前目录中的给定文件。如果文件已经有前缀,它将删除它并分配一个新的顺序前缀。如果文件没有前缀,它将为其添加顺序前缀。
最终结果应该是,当前目录中的所有文件(一些有前缀,一些没有前缀)都将具有新的顺序前缀。