Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex OSX:更改多个文件名中的日期格式_Regex_Macos_Command Line_Sed_Batch Rename - Fatal编程技术网

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

Regex OSX:更改多个文件名中的日期格式,regex,macos,command-line,sed,batch-rename,Regex,Macos,Command Line,Sed,Batch Rename,我有大量这种格式的文件(iPhone摄像头): 如何使用OSX命令行将这些文件批量重命名为此(ISO)格式: 我已尝试使用以下命令,但似乎不起作用: for i in Photo* do mv "$i" "`echo $i | sed 's_Photo ([0-9]+)-([0-9]+)-([0-9]+) (.*)_\3-\2-\1 \4_/'`” done 你有一个误伤 sed的基本正则表达式需要很多反斜杠。试一试 mv "$i" "$(echo "$i" | sed -r 's_Pho

我有大量这种格式的文件(iPhone摄像头):

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

我已尝试使用以下命令,但似乎不起作用:

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

你有一个误伤

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
$od-c您可以使用:

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

mv“$i”“$(sed-E的/^Photo([0-9]*)-([0-9]*)-([0-9]*)(.*)/20\3-\2-\1\4/'在那行的末尾有一个打字错误:double
“$i”)
刚刚尝试过,但不起作用,没有任何变化。这是输出:用法: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 10.jpg尝试了两行,但我得到了一个错误:sed:非法选项--r用法:sed script[-Ealn][i扩展名][file…]sed[-Ealn][i扩展名][e script]…[-f script_file]…[file…]mv:重命名照片19-12-13 17 29 10(1).jpg:无此类文件或目录
$ 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
for i in Photo*; do
    mv "$i" "$(sed -E 's/^Photo ([0-9]*)-([0-9]*)-([0-9]*) (.*)$/20\3-\2-\1 \4/' <<< "$i")"
done