を使用して多くのディレクトリを作成したいと思います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