如何使用shell脚本创建多个目录

时间:2017-06-29 14:29:01

标签: linux shell unix

我是shell脚本的新手,我正在尝试使用特定位置的脚本创建多个目录。我对此一无所知,我在这里给出了我迄今为止所尝试过的内容,

directory_name="/home/usw9bls7/lib1"

if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi

I have to create directory at locations
"/home/usw9bls7/config1"
"/home/usw9bls7/DNQ/lib1"
"/home/usw9bls7/DNQ/config1"

Plesae帮助

4 个答案:

答案 0 :(得分:3)

不要对这样简单的任务使用“if”语句,使用mkdir的“-p, - parent”创建几个不存在的目录并忽略现有目录。

使用元字符组合该功能以扩展子文件夹创建。

在这个例子中,我用一个命令创建了下一个结构:

-/home
   |---/usw9bls7
          |------- DNQ
                     |---- lib1
                     |---- config1

user@DESKTOP-RR909JI ~
$ mkdir -p /home/usw9bls7/DNQ/{lib1,config1}

user@DESKTOP-RR909JI ~
$ ls -ltr /home/usw9bls7/DNQ/
total 0
drwxr-xr-x+ 1 user user 0 jun. 29 20:17 lib1
drwxr-xr-x+ 1 user user 0 jun. 29 20:17 config1

在我的环境中(/ home除外)之前都没有这些目录存在。无论如何,如果你想创建脚本,请尝试使用它来简化。

答案 1 :(得分:0)

如果您使用bash

,请使用大括号扩展
directory_name="/home/usw9bls7/lib1"

if [ -d "$directory_name" ];then
   echo "Directory already exists"
else
    mkdir -p  /home/usw9bls7/{config1,DNQ/lib1,DNQ/config1}/"$directory_name"
fi

示例:使用echo命令。

echo /home/usw9bls7/{config1,DNQ/lib1,DNQ/config1}
/home/usw9bls7/config1 /home/usw9bls7/DNQ/lib1 /home/usw9bls7/DNQ/config1

答案 2 :(得分:0)

便携式POSIX解决方案(适用于/ bin / ksh,/ bin / sh和/ bin / bash)

module

这只是循环你给定的名字,然后制作它们。我添加了#!/bin/sh parent_directory="/home/usw9bls7/lib1" for directory_name in config1 DNQ/lib1 DNQ/config1 do if [ -d "$parent_directory/$directory_name" ] then echo "Directory already exists" else mkdir -p "$parent_directory/$directory_name" fi done 选项,以便根据需要静默创建DNQ之类的缺失父级。

请注意,如果它们作为文件而不是目录存在,您将从mkdir获得错误。至少你会得到一些东西。

答案 3 :(得分:0)

将所有内容传递给mkdir -p

mkdir -p \
"/home/usw9bls7/config1" \
"/home/usw9bls7/DNQ/lib1" \
"/home/usw9bls7/DNQ/config1" 

如果你具有超强的表现意识,你可以先从shell测试它们是否存在。这是我在shell lib中所做的事情:

all_eh()
{
    local predic a; predic=$1; shift
    for a; do
        $predic "$a" || return 1
    done
}
mkdir_p() { all_eh 'test -d' "$@" || mkdir -p "$@"; }

如果所有目录都存在,这会更快,因为test(或[)是一个内置的shell(几乎所有的shell),因此不会花费你通常的1-2ms分叉/ exec开销。