【发布时间】:2014-06-08 23:46:21
【问题描述】:
我的目标是将格式为“img_MM-DD-YY_XX.jpg”的文件文件夹重命名为格式“newyears_YYYY-MM-DD_XXX.jpg”,方法是遍历每个文件名并使用 sed 执行基于字符的替换职位。不幸的是,我似乎无法让基于位置的交换工作。
例如s/.\{4\}[0-9][0-9]/.\{10\}[0-9][0-9]/ 尝试将 MM 替换为 YY
这是我的尝试(暂时忽略 _XX 部分):
for filename in images/*
do
newname=$(echo $filename | sed 's/.\{4\}[0-9][0-9]/.\{10\}[0-9][0-9]/;
s/.\{7\}[0-9][0-9]/.\{4\}[0-9][0-9]/;
s/.\{10\}[0-9][0-9]/.\{7\}[0-9][0-9]/;
s/img_/newyears_20/')
mv $filename $newname
done
有什么办法可以解决这个问题吗?
【问题讨论】:
-
使用
awk代替sed可能会更好。 -
你应该使用 zsh -
zmv 'img_(??)-(??)-(??)_(??).jpg' 'newyears_20$3-$2-$1_0$4.jpg'