shell脚本中文件名的年月日

use*_*390 3 scripting awk shell-scripting

我有像下面这样的文件名

adn_DF9D_20140515_0001.log
adn_DF9D_20140515_0002.log
adn_DF9D_20140515_0003.log
adn_DF9D_20140515_0004.log
adn_DF9D_20140515_0005.log
adn_DF9D_20140515_0006.log
adn_DF9D_20140515_0007.log
Run Code Online (Sandbox Code Playgroud)

我想从文件名中获取年、月、日并创建目录

前任: [[ ! -d "$BASE_DIR/$year/$month/$day" ]] && mkdir -p "$BASE_DIR/$year/$month/$day";

如何实现这一目标并分享您的想法/脚本

Lau*_*scu 6

如果文件名总是像您的示例中那样,您可以使用以下内容:

for x in *.log; do year=${x:9:4}; month=${x:13:2}; day=${x:15:2}; [[ ! -d "$year/$month/$day" ]] && mkdir -p "$year/$month/$day"; done
Run Code Online (Sandbox Code Playgroud)

这个子串提取在bash中可用,其他shell不确定。