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

create a multi variable nested directory structure UNIX

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

所需的目录结构:

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

等...

按 YEAR 变量创建: set varYear (seq 1996 2016) # fish shell 语法

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

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

第二次失败尝试: 因为我在 $varDate echo $i "/" $varType 结束 # fish shell 语法

对于如何在 for 循环中将两个变量组合在一起以创建目录结构的一些帮助,我们将不胜感激。

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
$ 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

Glenn 的回答很好,但实际上并不需要大括号。此外,括号用于子命令(类似于 bash 的 $())。所以你的 set varType (doc pdf txt) 中的括号不会做你想做的,除非你打算 运行 一个名为 doc 的命令。试试这个,它依赖于 fish 扩展具有多个值的变量的独特方式:

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