创建一个多变量嵌套目录结构UNIX

时间:2016-08-25 11:01:37

标签: unix for-loop terminal fish seq

尝试创建嵌套目录结构YEAR/FILE_TYPE

所需的目录结构:

~/2016/doc
~/2016/pdf
~/2016/txt
~/2015/doc
~/2015/pdf
~/2015/txt

等...

使用YEAR变量创建:     设置 varYear (seq 1996 2016)#fish shell语法

创建文件类型变量     设置 varType (doc pdf txt)#fish shell语法

第一次尝试失败: 运行echo" mkdir /" $ varDate / $ varType

第二次尝试失败: 对于 $ varDate 中的i     echo $ i" /"的 $ VARTYPE 结束#fish shell语法

如果在for循环中将两个变量组合在一起以创建目录结构,我们将不胜感激。

3 个答案:

答案 0 :(得分:3)

$ set years 2015 2016
$ set subdirs doc pdf txt
$ echo {$years}/{$subdirs}
2015/doc 2016/doc 2015/pdf 2016/pdf 2015/txt 2016/txt

只需将echo替换为mkdir -p

https://fishshell.com/docs/current/index.html#expand-variable
https://fishshell.com/docs/current/index.html#expand-brace

答案 1 :(得分:2)

fish shell中开始使用类似的内容。

这是bash

ftypes=(doc pdf txt)
for year in $(seq 1996 2016)
do
    for ftype in ${ftypes[*]}
    do
        echo "mkdir -p $year/$ftype"
        #mkdir -p "$year/$ftype"
    done
done

答案 2 :(得分:2)

格伦的答案很好,但实际上并不需要括号。此外,括号用于子命令(类似于bash' s $())。因此,除非您打算运行名为set varType (doc pdf txt)的命令,否则doc中的parens不会执行您想要的操作。试试这依赖于鱼的独特方式来扩展具有多个值的变量:

set varYear (seq 1996 2016)
set varType doc pdf txt
mkdir -p $varYear/$varType

或者使用传统的循环结构:

for varYear in (seq 1996 2016)
    for varType in doc pdf txt
        mkdir -p $varYear/$varType
    end
end