如何通过Linux中的shell脚本创建新目录?

时间:2013-02-01 03:42:22

标签: linux shell

如果/proj不存在,我正在尝试使用子目录bin, cgi, sbin, etc...创建新目录/proj。但是,它不是创建多个子目录,而是创建一个名为{Changes...src}

的子目录
#If project directory exists, then do not create a new one.                             
if [ -d /proj ]; then
     echo "Project directory exists. New directory will not be created."

#Otherwise, create a new project directory.                                             
else
     echo "Project directory does not exist. Creating a new project directory..."
     mkdir -p proj/{Changes,Makefile,bin,cgi,doc,etc,html,lib,sbin,src}
fi

我想要制作我想要的子目录是什么?

2 个答案:

答案 0 :(得分:1)

sgeorge-mn:tmp sgeorge$ ls proj
ls: proj: No such file or directory
sgeorge-mn:tmp sgeorge$ mkdir -p proj/{Changes,Makefile,bin,cgi,doc,etc,html,lib,sbin,src}
sgeorge-mn:tmp sgeorge$ ls proj
Changes     Makefile    bin     cgi     doc     etc     html        lib     sbin        src

<强>供参考:
以下表示目录proj位于/

if [ -d /proj ]; then

修改

我看到的一个概率是(可能不是真的):

在评论中,您说您可以使用mkdir -p proj/{Changes,Makefile,bin,cgi,doc,etc,html,lib,sbin,src}创建目录。但在那之后,你说的是#34;当我进入/ proj时,它仍然是一个单独的子目录&#34;。可能在这里是你的问题。

您可能已经有一个名为/proj。 - - )

的目录

答案 1 :(得分:1)

我可能找到了clue

通过”set -B“命令和shell的”-B“命令行选项启用Brace扩展,并通过命令行上的”set + B“和”+ B“禁用。< / EM>“

您运行的某些其他脚本(可能是自动的,还是通过.bashrc)“是否可能会关闭”支持扩展?以下是我做过的一些测试:

floris% /bin/bash -B
bash-3.2$ echo {1..3}
1 2 3
## ^^ brace expansion is ON

floris% /bin/bash +B
bash-3.2$ echo {1..3}
{1..3}
## ^^ brace expansion is OFF

这里有点疯狂但是......如果我创建一个简单的shell脚本testbrace-

#!/bin/bash -B
echo {1..3}

并从命令行运行它,如下所示:

floris% ./testbrace-
{1..3}

等效脚本testbrace+

#!/bin/bash +B
echo {1..3}

给了我

floris% ./testbrace+
{1..3}

换句话说,+ -B标志似乎不会影响脚本的运行方式。在任何一种情况下,大括号扩展都是禁用的。

然而,当我从命令行专门用一个标志调用bash时,我会影响结果:

floris% /bin/bash +B testbrace-
{1..5}
floris% /bin/bash +B testbrace+
{1..5}
floris% /bin/bash -B testbrace-
1 2 3 4 5
floris% /bin/bash -B testbrace+
1 2 3 4 5

正如您所看到的,脚本将执行大括号扩展IFF我用/bin/bash -B scriptname调用它 - 此时它会忽略脚本中的B标志。如果您使用此方法调用目录创建脚本,我希望您将获得相同的结果。

另外,请确保将下一行更改为

if [ -d ./proj ]
几个人指出。