重命名文件;通配符选择输入,想要在输出中返回通配符值

重命名文件;通配符选择输入,想要在输出中返回通配符值

我有一组文件如下:

Q-30-09-1753.TIF
W-01-04-1753.TIF
W-31-12-1752.TIF
Y-14-12-1752.TIF

使用Windows 上的 git bash我希望重命名文件,将字母放在文件名末尾,如下所示;

30-09-1753-Q.TIF
01-04-1753-W.TIF
31-12-1752-W.TIF
14-12-1752-Y.TIF

我尝试使用以下代码:

for f in *.TIF ; do 
    mv "$f" "${f//[A-Z]]\-[0-9][0-9]\-[0-9][0-9]\-[0-9][0-9][0-9][0-9]\-[A-Z]/}";
    echo "$f"
done

第一部分成功选择要更改的文件,但在重命名它们时,通配符选择是文字。

答案1

我可能会很懒,让我sed帮我做这件事

newfilename=$(echo "${f}"|sed 's/\(.\)-\([^\.]*\)\.TIF/\2-\1.TIF/')
mv "${f}" "${newfilename}"

而不是学习 bash 可能优秀但单独的字符串替换方法:)

顺便说一句,如果这些是日期,则您的日期格式不利于排序。改为 ISO 日期格式:YYYY-MM-DD 将允许您根据日期正确对文件名进行排序! (否则,您将首先按日期排序,然后按第二个月,最后按年份排序。)

newfilename=$(echo "${f}"|sed 's/\(.\)-\(..\)-\(..\)-\(....\)\.TIF/\4-\3-\2-\1.TIF/')

相关内容