2013-12-20 59 views
3

我在這個格式的大量文件(iPhone攝像頭)更改日期格式:OSX:在多個文件名

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 
+1

您在該行末尾附近有一個錯字:doubled''$ i「)' – janos

+0

@janos:Thanks so很多,糾正它。 – anubhava

+0

剛剛嘗試過,但它不工作,沒有任何變化。這是輸出: 用法:mv [-f | -i | -n] [-v]源目標 mv [-f | -i | -n] [-v]源...目錄 – user2630076

1

你有一個流浪小號睫毛。

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 
+0

剛纔試了兩行,但我得到一個錯誤:sed:非法選項-r 用法:sed腳本[-Ealn] [-i擴展名] [文件...] sed [-Ealn] [-i擴展名] [-e腳本] ... [ f script_file] ... [文件...] mv:rename照片19-12-13 17 29 10(1).jpg到:沒有這樣的文件或目錄 – user2630076