2017-06-29 208 views
1

我是新來的shell腳本創建多個目錄,我試圖創建一個使用腳本在特定locations.i多個目錄中沒有關於這個想法,我在這裏給我所到目前爲止已經試過,如何使用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

@ImAtWar請檢查我的編輯職位 – Mandrek

+2

使用「-p」作爲選項'mkdir'創建缺少的中間目錄。 –

+0

的[如何創建遞歸使用bash不存在的子目錄?](https://stackoverflow.com/q/1731767/608639) – jww

回答

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 
+0

getting:command not found ./test.sh:line 8:語法錯誤附近的意外標記'fi' ./test.sh:line 8:'fi' – Mandrek

+0

同樣的錯誤我得到 – Mandrek

+0

檢查現在.... .. –

0

便攜式POSIX溶液(位於/ bin/KSH工作,/ bin/sh的,和/斌/ bash)的

#!/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 

這只是循環在你給出的名字,然後讓他們。我添加了-p選項,以便根據需要靜靜地創建丟失的父母,如DNQ。

需要注意的是,如果這些存在的文件,而不是目錄,你會從的mkdir出現錯誤。至少你會得到一些東西。

3

不要使用「如果」語句對於這樣簡單的任務,我們將使用mkdir的「-p,--parents」創建幾個目錄不存在,而忽略現有的。

使用的元字符擴展子文件夾的作品再加上能力。

在這個例子中,我創建了一個結構用一個命令:

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

[email protected] ~ 
$ mkdir -p /home/usw9bls7/DNQ/{lib1,config1} 

[email protected] ~ 
$ 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)。無論如何,如果你想創建腳本嘗試用這個簡化事情。

+0

你沒有'/ home'文件夾? * Gas​​p * – jpaugh

+0

哈哈哈,我有一個Cygwin,有一個/家,是的。 –

0

他們都傳遞給mkdir -p

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

如果你是超級的表現意識,你可以先測試他們的存在從shell。下面是我在外殼的lib正在做:

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

這是更快,如果存在,所有的目錄,因爲test(或[)是shell內建命令(在幾乎所有的殼)等不花你的通常1-2ms的fork/exec開銷。