簡體   English   中英

如何使用shell腳本創建多個目錄

[英]How to create multiple directories using shell script

我是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幫助

不要對這樣簡單的任務使用“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)。 無論如何,如果你想創建腳本,請嘗試使用它來簡化。

如果使用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

示例:with echo命令。

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

便攜式POSIX解決方案(在/ bin / ksh,/ bin / sh和/ bin / 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中獲取錯誤。 至少你會得到一些東西。

將它們全部傳遞給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 fork / exec開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM