運用awk與xargs批次改檔名

因工作上接觸awk來處理log發現了另外的天地,Unix強大的字串處理能力著實令我著迷.
於是想起我自己延宕多時沒有處理的資料夾名稱轉換問題也可以這樣子來解決.
馬上拿我的環境來實做…

#//原本的資料型態
scottj@ubuntu:~/share_upload/Music Collection/1998$ ls
19980000_電影原聲帶-聖戰奇兵               19980600_莫文蔚-I Say 我要說
19980400_動力火車-明天的明天的明天         19980625_錦繡二重唱-情比姐妹深
19980523_電影原聲帶-X情人(city of angels)  19981012_張惠妹-牽手
#//第一步,找出分隔符號,這邊包含"-"與"_"混用
scottj@ubuntu:~/share_upload/Music Collection/1998$ ls |awk -F'[-_]' '{print $1 " " $2 " " $3}'
19980000 電影原聲帶 聖戰奇兵
19980400 動力火車 明天的明天的明天
19980523 電影原聲帶 X情人(city of angels)
19980600 莫文蔚 I Say 我要說
19980625 錦繡二重唱 情比姐妹深
19981012 張惠妹 牽手
#//驗證欄位的正確性,並改變成新的命名格式
scottj@ubuntu:~/share_upload/Music Collection/1998$ ls |awk -F'[-_]' '{print "[1998] [" $2 "] [" $3 "]"}'
[1998] [電影原聲帶] [聖戰奇兵]
[1998] [動力火車] [明天的明天的明天]
[1998] [電影原聲帶] [X情人(city of angels)]
[1998] [莫文蔚] [I Say 我要說]
[1998] [錦繡二重唱] [情比姐妹深]
[1998] [張惠妹] [牽手]
#//加上雙引號讓後續指令辨別
scottj@ubuntu:~/share_upload/Music Collection/1998$ ls |awk -F'[-_]' '{print "\"[1998] [" $2 "] [" $3 "]\""}'
"[1998] [電影原聲帶] [聖戰奇兵]"
"[1998] [動力火車] [明天的明天的明天]"
"[1998] [電影原聲帶] [X情人(city of angels)]"
"[1998] [莫文蔚] [I Say 我要說]"
"[1998] [錦繡二重唱] [情比姐妹深]"
"[1998] [張惠妹] [牽手]"
#//重新代入原本的檔案格式
scottj@ubuntu:~/share_upload/Music Collection/1998$ ls |awk -F'[-_]' '{print "\"" $1 "_" $2 "-" $3 "\" \"[1998] [" $2 "] [" $3 "]\""}'
"19980000_電影原聲帶-聖戰奇兵" "[1998] [電影原聲帶] [聖戰奇兵]"
"19980400_動力火車-明天的明天的明天" "[1998] [動力火車] [明天的明天的明天]"
"19980523_電影原聲帶-X情人(city of angels)" "[1998] [電影原聲帶] [X情人(city of angels)]"
"19980600_莫文蔚-I Say 我要說" "[1998] [莫文蔚] [I Say 我要說]"
"19980625_錦繡二重唱-情比姐妹深" "[1998] [錦繡二重唱] [情比姐妹深]"
"19981012_張惠妹-牽手" "[1998] [張惠妹] [牽手]"
#//傳給xargs處理並帶入mv指令
scottj@ubuntu:~/share_upload/Music Collection/1998$ ls |awk -F'[-_]' '{print "\"" $1 "_" $2 "-" $3 "\" \"[1998] [" $2 "] [" $3 "]\""}'|xargs -n2 mv
#//確認結果
scottj@ubuntu:~/share_upload/Music Collection/1998$ ls
[1998] [動力火車] [明天的明天的明天]
[1998] [張惠妹] [牽手]
[1998] [莫文蔚] [I Say 我要說]
[1998] [錦繡二重唱] [情比姐妹深]
[1998] [電影原聲帶] [X情人(city of angels)]
[1998] [電影原聲帶] [聖戰奇兵]
scottj@ubuntu:~/share_upload/Music Collection/1998$

refer:
http://stackoverflow.com/questions/12204192/awk-multiple-delimiter
http://www.gtwang.org/2014/04/xargs-command-examples-in-linux-unix.html

Facebook Comments
Scottj Written by:

史考特 喜歡3C 愛拍照