[英]I want to create multiple directories using shell script without using loops using one line command but I am not getting the desired results
[英]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.