OSX:更改多个文件名中的日期格式

Posted

技术标签:

【中文标题】OSX:更改多个文件名中的日期格式【英文标题】:OSX: change date format in multiple file names 【发布时间】:2014-01-09 17:50:19 【问题描述】:

我有大量这种格式的文件(iPhone 相机):

Photo 31-12-13 12 59 59.jpg

如何使用 OSX 命令行将这些文件批量重命名为这种 (ISO) 格式:

2013-12-31 12 59 59.jpg

我已经尝试使用下面的命令,但它似乎不起作用:

for i in Photo*
do
  mv "$i" "`echo $i | sed 's_Photo ([0-9]+)-([0-9]+)-([0-9]+) (.*)_\3-\2-\1 \4_/'`”
done

【问题讨论】:

【参考方案1】:

你可以使用:

for i in Photo*; do
    mv "$i" "$(sed -E 's/^Photo ([0-9]*)-([0-9]*)-([0-9]*) (.*)$/20\3-\2-\1 \4/' <<< "$i")"
done

【讨论】:

你在该行的末尾有一个错字:doubled "$i") 刚试过,但没有用,没有任何变化。这是输出:usage: mv [-f | -i | -n] [-v] 源目标 mv [-f | -i | -n] [-v] 源...目录 我在发布答案之前实际测试了它。 好的,试过了,但仍然没有任何变化。我忽略了什么吗?我使用终端 cd 到正确的目录,然后在提示符处粘贴。 输出多行,这里是一行: mv Photo 19-12-13 17 29 10.jpg Photo 19-12-13 17 29 10.jpg【参考方案2】:

你有一个杂散斜线。

sed 的基本正则表达式需要大量的反斜杠。试一试

mv "$i" "$(echo "$i" | sed -r 's_Photo ([0-9]+)-([0-9]+)-([0-9]+)_\3-\2-\1_')"
mv "$i" "$(echo "$i" | sed 's_Photo \([0-9]\+\)-\([0-9]\+\)-\([0-9]\+\)_\3-\2-\1_')"

请注意,您不必捕获行尾只是为了引用它保持不变。


另外,行尾的双引号也不是普通的双引号:

$ od -c <<< '  mv "$i" "`echo $i | sed '\''s_Photo ([0-9]+)-([0-9]+)-([0-9]+) (.*)_\3-\2-\1 \4_/'\''`”'
0000000           m   v       "   $   i   "       "   `   e   c   h   o
0000020       $   i       |       s   e   d       '   s   _   P   h   o
0000040   t   o       (   [   0   -   9   ]   +   )   -   (   [   0   -
0000060   9   ]   +   )   -   (   [   0   -   9   ]   +   )       (   .
0000100   *   )   _   \   3   -   \   2   -   \   1       \   4   _   /
0000120   '   ` 342 200 235  \n
0000126

【讨论】:

刚试了两行,但我得到一个错误:sed: 非法选项 -- r 用法:sed 脚本 [-Ealn] [-i extension] [file ...] sed [-Ealn] [ -i extension] [-e script] ... [-f script_file] ... [file ...] mv: rename Photo 19-12-13 17 29 10 (1).jpg to : No such file or directory

以上是关于OSX:更改多个文件名中的日期格式的主要内容,如果未能解决你的问题,请参考以下文章

更改系统日志中的日期格式

更改 csv 文件中的日期时间格式 - 批处理脚本/Powershell [关闭]

如何从数组更改日期格式

更改 Wildfly(JBoss) 访问日志中的日期格式

如何更改excel中的默认日期格式

在运行时更改系统日期格式时更新 DatePicker 中的日期格式