我是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帮助
答案 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开销。