使用bash for loop、mv和sed重命名多个文件
我的目标是通过迭代每个文件名并使用sed根据字符位置执行替换,将格式为“img_MM-DD-YY_XX.jpg”的文件文件夹重命名为格式为“newyears_YYYY-MM-DD_XXX.jpg”。不幸的是,我似乎无法让基于职位的互换发挥作用 e、 g.使用bash for loop、mv和sed重命名多个文件,bash,sed,rename,Bash,Sed,Rename,我的目标是通过迭代每个文件名并使用sed根据字符位置执行替换,将格式为“img_MM-DD-YY_XX.jpg”的文件文件夹重命名为格式为“newyears_YYYY-MM-DD_XXX.jpg”。不幸的是,我似乎无法让基于职位的互换发挥作用 e、 g.s/{4\}[0-9][0-9]/.{10\}[0-9][0-9]/试图用YY替换MM 以下是我的尝试(暂时忽略XX部分): 有没有办法解决这个问题 $ echo 'img_11-22-14_XX.jpg' | sed -r 's/[^_]*_(
s/{4\}[0-9][0-9]/.{10\}[0-9][0-9]/
试图用YY替换MM
以下是我的尝试(暂时忽略XX部分):
有没有办法解决这个问题
$ echo 'img_11-22-14_XX.jpg' | sed -r 's/[^_]*_([0-9]{2})-([0-9]{2})-([0-9]{2})/newyears_20\3-\1-\2/'
newyears_2014-11-22_XX.jpg
上面的内容将查找第一条下划线后接6位日期的内容。它将初始部分替换为新年
,并将日期从年月日重新设置为20yy-mm-dd
两位数的mm、dd或yy值与([0-9]{2})
匹配。括号表示sed
应捕获该值以供以后使用。替换的输出端是\u 20\3-\1-\2
。这将恢复下划线,并在年初添加一个20
。年份是第三个捕获值,因此表示为\3
。同样,月份是第一个捕获的值,因此表示为\1
,第二天是\2
为了消除一些黑斜杠,我使用-r
选项调用扩展正则表达式。如果您在Mac或其他非GNU系统上,请使用sed-E
代替sed-r
。否则,请使用:
sed 's/[^_]*_\([0-9]\{2\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)/newyears_20\3-\1-\2/'
这对于
awk
echo "img_MM-DD-YY_XX.jpg" | awk -F"[_-]" '{print "newyears_20"$4"-"$2"-"$3"_0"$5}'
newyears_20YY-MM-DD_0XX.jpg
使用
awk
而不是sed
可能会更幸运。您应该使用zsh-zmv'img_(?)-(?)-(?).jpg''newyears_20;20$3-$2-$1_0$4.jpg'
echo "img_MM-DD-YY_XX.jpg" | awk -F"[_-]" '{print "newyears_20"$4"-"$2"-"$3"_0"$5}'
newyears_20YY-MM-DD_0XX.jpg