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

时间:2013-09-20 09:22:28

标签: bash

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

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 个答案:

答案 0 :(得分:3)

尝试以下方法:

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来评估生成的命令。此解决方案适用于简单情况,但目录名称中的某些特殊字符(如空格)可能会导致问题。

希望这有帮助!

答案 1 :(得分:3)

如果您想要阅读,请多次致电mkdir。我怀疑目录创建会在你的程序中形成任何瓶颈。

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

答案 2 :(得分:2)

问题是每行开头的空格,这会导致行被视为mkdir命令的不同参数。要解决这个问题,你可以这样做:

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

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