需要在bash脚本中移动具有双位数数值的文件



我想移动一些有数字值作为filename一部分的文件。例如模式'ABC123_10_abc.txt'到目标位置'ABC123_abc.txt '

当前使用的命令:

mv $prefix_[0-9]_$suffix $prefix_$suffix;

但上述方法不适用于两位数。然而,如果我把*[0-9],它会在识别唯一文件名时产生问题,所以请建议

你的问题被标记为bash,所以我认为脚本编写是可以的。这应该有帮助:

#!/usr/bin/env bash
for file; do
if [[ "${file}" =~ ^(.+)_[0-9]+_(.+)$ ]]; then
prefix="${BASH_REMATCH[1]}"
suffix="${BASH_REMATCH[2]}"
mv -v "${file}" "${prefix}_${suffix}"
else
echo "File '${file}' does not match regex, skipping"
fi
done

将此脚本保存为例如renamer.sh,使其可执行,并使用要重命名的文件作为参数运行,例如./renamer.sh *.txt

每个文件名都匹配正则表达式^(.+)_[0-9]+_(.+)$,它将文件名分解为prefixsuffix。然后将文件重命名为${prefix}_${suffix}。适用于_xx_部分的任何数字。


注意,这是基于您提供的少量信息。如果这不是你想要的,请通过添加进一步的细节来澄清你的问题。