两步文件重命名

A two step file rename

我想将两部分代码组合成一个脚本,我可以用它来批量重命名文件。到目前为止,我做到了这一点:

前文件名:12345-[名称]_ABC_12345.txt

文件名之后:名称

for f in *.txt;  do 
    mv "$f" "${f//]*}";
done

for f in *txt;  do 
    echo mv "$f" "${f/*[/}";
done

假设我正确理解了您的要求,您似乎在寻找

for f in *\[*\]*.txt; do
    head=${f%%\]*}
    mv "$f" "${head#*\[}"
done

这将提取第一对方括号之间的部分并将其用作目标名称。 ${var#head}${var%tail} return $var 的值,其前缀与 glob 表达式 head 匹配,或后缀与 tail 匹配,trim治疗结束。双运算符变体 trim 最长而不是最短匹配。