我有一些將文件名中的日期轉換爲路徑的代碼。Shell(Bash)參數展開表達式
#!/bin/bash
aFile="bla_2016-11-24_17-24.zip" # Many files, each with same format: "bla_{year}-{month}-{day}_{hour}-{minute}.zip"
aDate=${aFile#*_} # remove "bla_"
aDate=${aDate%.*} # remove ".zip"
aDate=${aDate//_/ } # replace "_" with " "
aDate=(${aDate//-/ }) # replace "-" with " " and make array
aPath="${aDate[0]}/${aDate[1]}/${aDate[2]}/${aDate[3]}/${aDate[4]}"
mkdir -p $aPath
我看到這兩個(1,2),這表明,在bash腳本嵌套參數擴展表達式是不可能的。
我想知道是否有更好的方法來實現我的代碼上面,更具體地減少代碼的長度。這只是五行,所以如果不可能的話,不會有太大的刺激,但看起來我正在以一種愚蠢的方式去做。
Python的解決方案:
aFile = "bla_2016-11-24_17-24.zip"
import re
aPath = "/".join(re.split("[_-]", aFile[4:-4])) # 2016/11/24/17/24
隨着GNU sed的:'回聲 「bla_2016-11-24_17-24.zip」 | sed -E'/^[^ _] + _(。*)\。zip $/\ 1 /; s | [_-] |/| g''輸出:'2016/11/24/17/24 '或用awk:'echo「bla_2016-11-24_17-24.zip」| awk -F'[_.-]''{OFS =「/」;打印2美元,3美元,4美元,5美元,6美元}' – Cyrus
不錯的解決方案,我喜歡他們 – ratskin