2017-06-29 10 views
1

シェルスクリプトの初心者です。特定の場所でスクリプトを使用して複数のディレクトリを作成しようとしています.iについてはわかりません。これまでに試したことは何ですか?シェルスクリプトを使用して複数のディレクトリを作成する方法

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あなたがbashを使用する場合はブレース展開を使用して

+0

@ImAtWar私の編集した投稿を確認してください – Mandrek

+2

'mkdir'のオプションとして '-p'を使用すると、紛失した中間ディレクトリを作成できます。 –

+0

[Bashを使用して再帰的に存在しないサブディレクトリを作成する方法](https://stackoverflow.com/q/1731767/608639) – jww

答えて

0

を助ける:

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

get:command not found ./test.sh:8行目:予期しないトークン 'fi 'の近くの構文エラー ./test.sh:8行目:' fi' – Mandrek

+0

同じエラーが発生しました – Mandrek

+0

を確認しています.... .. –

0

ポータブル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からエラーが発生することに注意してください。少なくともあなたは何かを得るでしょう。

3

このような単純なタスクに対して "if"文を使用しないでください。mkdirの "-p、--parents"を使用して、存在しないディレクトリをいくつか作成して既存のものを無視します。

メタキャラクタを使用してその機能を結合し、サブフォルダの作成を拡張します。

は、この例では、私は1つのコマンドで次の構造体を作成しました:これらのディレクトリの

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

なし(用/家庭以外)私の環境では以前に存在しませんでした。とにかくスクリプトを作成したい場合は、これを使って簡単にしてみてください。

+0

あなたは '/ home'フォルダを持っていませんでしたか? * Gas​​p * – jpaugh

+0

haha​​ha、まあ私はCygwinを持っています、/ home、そうです。 –

0

mkdir -pにそれらすべてを渡します

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

あなたはスーパーパフォーマンスを意識している場合は、あなたが最初にシェルからの存在のためにそれらをテストすることができます。ここで私は私のシェルlibにやってんだよ:すべてのディレクトリが存在する場合test(または[)が(実質的にすべてのシェルで)シェル組み込みですので、あなたに費用がかからないので、

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]"; } 

これは高速です通常1-2msのfork/execオーバーヘッド。