mkdirとseqコマンドの問題

mkdirとseqコマンドの問題

コマンドラインmkdirseq

私が使用している場合:

mkdir name{`seq -s , 1 5`}

結果はディレクトリです。name{1,2,3,4,5}

どのコマンドを使用する必要がありますか?

答え1

seq 1 42 | mkdir name{1..5}

あるいは、人生、宇宙、そしてすべてに対する答えが必要ない場合は、あきらめ、seqbashの中かっこを拡張して作業自体を実行するようにしてください。

mkdir name{1..5}

ただし、使用する必要がある場合はseq宿題なので、次のようにします。

mkdir $(seq -f "name%d" 5)

答え2

何らかの理由で望ましくない場合支柱の拡張を使用する(下記参照) 以下を考慮することができます。

seq 5 | xargs -I N mkdir nameN

これによりname1、、、name2name3name4生成されますname5。これは、シェルが中括弧拡張をサポートしていない場合にもbash機能します(しかしサポートします)。このxargsコマンドはコマンドをビルドして実行します。この特定のxargsコマンドは同様のコマンドを実行しますmkdir nameNが、N入力されたすべての単語(パイプの入力seq)を置き換えます。走っman xargsたり読むこのページこの-Iオプションに関する追加情報。

宿題の場合、3番目のコマンド(xargs)を使用できない可能性があります。しかし、「実生活」ではそのような制限がある可能性はほとんどありません。また、学習目的でこれを行う場合は、さまざまな状況で役立つ可能性のあるコマンドを学ぶ機会ですxargs(まだわからない場合)。

次のシェルループを使用することもできます。Alex Pが提案したものfor d in $(seq 5); do mkdir name$d; done)。それforリング構文を使用$( )して実行コマンドの置き換え1 2 3 4 5その後、リストを取得するには、次をseq使用します。パラメータ拡張$d)はmkdir各コマンドのディレクトリ名を設定します。

これらの方法はすべて、スペースが含まれていないディレクトリ名に依存することに注意してください。ただし、スペースが含まれないように変更することはできます。

しかし、あなたはbash次のように使用しています多くの殻、支える支柱の拡張。これでスクリプトが必要になることがあります。持ち運べるサポートされていないシェルの場合(例:dash)。それが必要なものであれば、中かっこ拡張をまったく使用しないでください。そうでなければフォローするジェフ・シャラーがおすすめただ書いてくださいmkdir name{1..5}

関連情報