【发布时间】:2016-07-18 01:32:16
【问题描述】:
我有一个 bash 脚本,它混合了模板文件和数据,这些模板文件和数据分层排列在名为 INPUT 的目录中。
脚本执行以下操作:
- 创建分层文件输出结构,
OUTPUT - 使用过滤/后处理数据填充所述文件树。
- 在所述数据上运行一些用于可视化等的外部程序。
由于我希望此脚本尽可能便携并便于同事运行,我不想在外部预先制作 OUTPUT 文件夹结构,我想动态生成它。
不幸的是,这会创建一个大文本球。
目前我有类似的东西:
$!/bin/bash
function MkdirAndAssign() { mkdir -p $1; echo $1; }
baseDir=$( pwd )
outDir=$( MkdirAndAssign ${baseDir}/OUTPUT )
outTop1Dir=$( MkdirAndAssign ${outDir}/TOP1 )
outMid1_1Dir=$( MkdirAndAssign ${outTop1Dir}/MID1_1 )
outMid1_2Dir=$( MkdirAndAssign ${outTop1Dir}/MID1_2 )
outMid1_3Dir=$( MkdirAndAssign ${outTop1Dir}/MID1_3 )
outBottom1_3_1Dir=$( MkdirAndAssign ${outMid1_3Dir} )
outTop2Dir=$( MkdirAndAssign ${outDir}/TOP2 )
outTop3Dir=$( MkdirAndAssign ${outDir}/TOP3 )
outMid3_1Dir=$( MkdirAndAssign ${outTop1Dir}/MID3_1 )
outMid3_2Dir=$( MkdirAndAssign ${outTop1Dir}/MID3_2 )
当然,这些只是编造的目录名……我真正的名字有实际意义……但关键是我正在构建这么多嵌套目录。
我的问题:
有没有什么shell命令可以让这个更短更甜??
(请注意,我的函数基本上只是包装了mkdir -p,这样我就可以在一个命令中获得变量赋值,以便以后重用。)
【问题讨论】:
-
不幸的是,我认为没有任何其他工具可以让它变得更简单。如果您正在动态创建,我看到的唯一其他选项是一些方案,您将生成的路径组件保存在一个数组(或者可能是一个关联数组)中,然后您可以在某些循环方案中使用它来创建 dir 结构当您有需要的数据。老实说,这听起来没什么好处,但它可能会根据您的最终循环逻辑(或使其变得更糟......)来整理事情。祝你好运。
-
关闭你可以得到
mkdir -p $(pwd)/OUTPUT/TOP1/MID1_{1,2,3} $(pwd)/OUTPUT/TOP2 $(pwd)/OUTPUT/TOP3/MID1_{1,2} -
啊,这很聪明/很方便@7171u!你能不能把它变成一个解决方案。它让我足够接近我可以解决其余部分的地方......我想给你荣誉。
标签: bash shell scripting directory