1

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

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命令?

4

3 回答 3

3

如果您想阅读,只需mkdir多次调用。我怀疑目录创建会在您的程序中形成任何类型的瓶颈。

mkdir dir1
mkdir -p dir1/dir1.{1,2,3}
mkdir -p dir1/dir1.1/dir1.1.{1,2}
于 2013-09-20T16:00:02.373 回答
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评估结果命令。此解决方案应该适用于简单的情况,但目录名称中的一些特殊字符(例如空格)可能会导致问题。

希望这可以帮助!

于 2013-09-20T09:38:46.113 回答
2

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

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

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

于 2013-09-20T09:38:56.343 回答