代码之家  ›  专栏  ›  技术社区  ›  pogibas

如何包装多个子目录mkdir命令

  •  1
  • pogibas  · 技术社区  · 13 年前

    我想创建多个子目录。
    我的命令是:

    mkdir -p dir1/{dir1.1/{dir1.1.1,dir1.1.2},dir1.2,dir1.3}  
    

    它有效,结果是:

      dir1
          dir1.1
              dir1.1.1
              dir1.1.2
          dir1.2
          dir1.3
    

    然而,我想让这个命令看起来更好(更可读)。尝试:

    mkdir -p \
       dir1/{\
          dir1.1/{\
             dir1.1.1,\
             dir1.1.2},\
          dir1.2,\
          dir1.3}  
    

    这是行不通的。结果是:

      ls *  
      dir1  dir1.1  dir1.1.1,  dir1.1.2},  dir1.2,  dir1.3}
    

    我怎么能把这样的包裹起来 mkdir 命令

    3 回复  |  直到 13 年前
        1
  •  3
  •   urish    13 年前

    请尝试以下操作:

    eval mkdir -p `echo \
       dir1/{\
          dir1.1/{\
             dir1.1.1,\
             dir1.1.2},\
          dir1.2,\
          dir1.3}\
    | sed -E 's/\s*//g'`  
    

    说明:您的原始代码在参数中引入了空格,因此不需要调用

    mkdir -p dir1/{dir1.1/{dir1.1.1,dir1.1.2},dir1.2,dir1.3}  
    

    实际上,您正在使用以下参数调用该命令:

    mkdir -p dir1/{ dir1.1/{ dir1.1.1, dir1.1.2}, dir1.2, dir1.3}
    

    这就是为什么你创建了错误的目录。因此,为了解决这个问题,我首先使用 sed ,然后使用 eval 以评估生成的命令。这个解决方案应该适用于简单的情况,但目录名中的一些特殊字符(如空格)可能会导致问题。

    希望这能有所帮助!

        2
  •  3
  •   chepner    13 年前

    如果你想阅读,只要打电话 mkdir 多次。我怀疑目录创建是否会在您的程序中形成任何类型的瓶颈。

    mkdir dir1
    mkdir -p dir1/dir1.{1,2,3}
    mkdir -p dir1/dir1.1/dir1.1.{1,2}
    
        3
  •  2
  •   user000001 jim mcnamara    13 年前

    问题是每一行开头都有空白,这导致这些行被视为mkdir命令的不同参数。要克服这一点,您可以执行以下操作:

    mkdir -p \
    dir1/{\
    dir1.1/{\
    dir1.1.1,\
    dir1.1.2},\
    dir1.2,\
    dir1.3} 
    

    开头没有空格。这是否比第一个命令更具可读性还有待商榷。

    推荐文章