我想移动一些有数字值作为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]+_(.+)$
,它将文件名分解为prefix
和suffix
。然后将文件重命名为${prefix}_${suffix}
。适用于_xx_
部分的任何数字。
注意,这是基于您提供的少量信息。如果这不是你想要的,请通过添加进一步的细节来澄清你的问题。