我想创建多个子目录 我的命令是:
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
命令?
答案 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}
开头没有空格。这是否比第一个命令更具可读性是值得商榷的。