mkdirを使用して複数のディレクトリを作成する

mkdirを使用して複数のディレクトリを作成する

を使用して多くのディレクトリを作成したいと思いますmkdir。各ディレクトリ名は、プレフィックス(文字列)とインデックス(整数)で構成されています。接頭辞を「s」にしてインデックス範囲を1から50までに設定するとします。これは、次のようなディレクトリを作成したいことを意味します。

s1, s2, ... , s49,s50

自動化を使用してこれを行う方法はありますかmkdir?時間をいただきありがとうございます。

答え1

  • 一つ

    for i in {1..50}; do
      mkdir s"$i"
    done
    
  • 二つ

    mkdir s{1..50}
    

    このオプションは以下で利用できます。強く打つ扱いにくいそしてクッシュ 93

  • サム

    mkdir $(printf "s%02i " $(seq 1 50))
    

答え2

これを行うには、シェルスクリプトを使用できます。

Pure sh - POSIX 古い bourne シェルでも動作します。

n=1;
max=50;
while [ "$n" -le "$max" ]; do
  mkdir "s$n"
  n=`expr "$n" + 1`;
done

多数のディレクトリを作成する場合は、スクリプトを単一の呼び出しに減らし、テストおよび算術シェル組み込み機能を使用してmkdirスクリプトを高速化できます。このように:

n=1
max=50
set -- # this sets $@ [the argv array] to an empty list.

while [ "$n" -le "$max" ]; do
    set -- "$@" "s$n" # this adds s$n to the end of $@
    n=$(( $n + 1 ));
done 

mkdir "$@"

Zsh、ksh93、またはbashを使用すると、これは簡単になりますが、組み込みではなくmkdir他のシェルでは機能しない可能性があることを指摘する必要があります。大きい場合は、コマンドに渡すことができる引数の数、またはサイズ全体の制限によって影響を受ける可能性があります。

mkdir s{1..50}

答え3

これには複雑な答えがたくさんありますが、bashを使用すると非常に簡単になります。もちろん純粋なPOSIXソリューションも可能ですが、bash使用中のシェルを活用してみてはいかがでしょうか。あなたはこれを簡単に行うことができます支柱の拡張:

% mkdir -v s{1..10} && ls -1d s{1..10}                                   (09-24 17:37)
mkdir: created directory `s1'
mkdir: created directory `s2'
mkdir: created directory `s3'
mkdir: created directory `s4'
mkdir: created directory `s5'
mkdir: created directory `s6'
mkdir: created directory `s7'
mkdir: created directory `s8'
mkdir: created directory `s9'
mkdir: created directory `s10'
s1
s10
s2
s3
s4
s5
s6
s7
s8
s9

答え4

言い換えれば、以下は再帰を使用するPOSIX shソリューションです。

makedirs() {
  [ "$1" -gt 0 ] || return
  mkdir "s$1"
  makedirs $(( $1 - 1 ))
}
$ makedirs 9
$ ls
s1  s2  s3  s4  s5  s6  s7  s8  s9

関連情報