すべての文字のディレクトリを繰り返し作成

すべての文字のディレクトリを繰り返し作成

aからのディレクトリを表示する必要がある方法でディレクトリを作成したいと思いますz。各ディレクトリ内にサブディレクトリを作成し、等としてaa表示できるようにする必要があります。ab

たとえば、ディレクトリの場合、私のサブディレクトリには最大までラベルがm付けられています。mambmz

答え1

努力する:

for x in {a..z} ; do mkdir -p $x/${x}{a..z} ; done

Bashは、等XXX{a..z}に拡張されます。持っている内部ループは必要ありません。XXXaXXXb

以来:

$ ls
a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
$ ls m
ma  mc  me  mg  mi  mk  mm  mo  mq  ms  mu  mw  my
mb  md  mf  mh  mj  ml  mn  mp  mr  mt  mv  mx  mz

答え2

したがって、bash文字を拡張すると、次のように動作します。

set {a..z}
for a do printf "./$a/$a%s\n" "$@"
done | xargs mkdir -p

最初の行にアルファベットを1回だけ入力すると、同じ概念がどのシェルにも移植可能でなければなりません。入力したくない場合は、セット行に移動する別の方法があります。たとえば、次のようになります。

seq -sP32P 97 123|dc
a b c d e f g h i j k l m n o p q r s t u v w x y z 

...たとえば、ASCIIロケールで作業します。したがって、必要なパラメータの別々のリストset $(seq -sP32P 97 123|dc)を取得するために、または他のコマンドを使用することができますが、単にそのコマンドを使用または入力する方が$IFS良いことを意味します。bash

とにかく必要なときにだけ呼び出されるので、これを行うことができますmkdir

ただ証明するためにどのように動作します。より小さなコレクションのデバッグ出力は次のとおりです。

sh -cx 'for n do printf "./$n/$n%s\n" "$@"; done|cat' -- arg1 arg2 arg3
+ for n in '"$@"'
+ printf './arg1/arg1%s\n' arg1 arg2 arg3
+ cat
+ for n in '"$@"'
+ printf './arg2/arg2%s\n' arg1 arg2 arg3
+ for n in '"$@"'
+ printf './arg3/arg3%s\n' arg1 arg2 arg3
./arg1/arg1arg1
./arg1/arg1arg2
./arg1/arg1arg3
./arg2/arg2arg1
./arg2/arg2arg2
./arg2/arg2arg3
./arg3/arg3arg1
./arg3/arg3arg2
./arg3/arg3arg3

ご覧のとおり、各位置パラメータ配列インデックスは一度だけ繰り返されます。上記では、呼び出し時にパラメータを渡してforここで設定しました。ただし、各反復はパラメータリストから同じ配列を受け取り、対応する書式文字列を適用します。各引数に追加するので、不要な再帰なしで再帰的な外観を得ることができます。shset ${positionals}printf

そして、同じようにループのdone|commandすべての出力をパイプにストリーミングすると、すべてファイルにストリーミングされます。完全な構成は、出力ファイルを一度だけ開閉します。fordone >filefor...done

答え3

~からここ、結局こんなスクリプトを作ることになりました。しかし、エレガントな解決策を得ると、それは答えとして受け入れられます。

for x in {a..z}
do
    mkdir -p /home/ramesh/$x
    cd /home/ramesh/$x
    for y in {a..z}
    do
        mkdir -p /home/ramesh/$x/$x$y
    done
done

答え4

存在するPerl

perl -MFile::Path=make_path -e '
    make_path(map { $l=$_; map { "$l/$l$_" } a..z } a..z)
'

File::PathはコアモジュールなのでPerl 5.001

関連情報