1

複数のサブディレクトリを作成したい。
私のコマンドは次のとおりです。

mkdir -p dir1/{dir1.1/{dir1.1.1,dir1.1.2},dir1.2,dir1.3}  

動作します。結果は次のとおりです。

  dir1
      dir1.1
          dir1.1.1
          dir1.1.2
      dir1.2
      dir1.3

ただし、このコマンドの見栄えを良くしたい (読みやすくしたい)。しようとしました:

mkdir -p \
   dir1/{\
      dir1.1/{\
         dir1.1.1,\
         dir1.1.2},\
      dir1.2,\
      dir1.3}  

そして、これは機能しません。結果は次のとおりです。

  ls *  
  dir1  dir1.1  dir1.1.1,  dir1.1.2},  dir1.2,  dir1.3}

mkdirそのようなコマンドをラップするにはどうすればよいですか?

4

3 に答える 3

3

読みたい場合は、mkdir複数回呼び出すだけです。ディレクトリの作成がプログラムのボトルネックになるとは思えません。

mkdir dir1
mkdir -p dir1/dir1.{1,2,3}
mkdir -p dir1/dir1.1/dir1.1.{1,2}
于 2013-09-20T16:00:02.373 に答える
3

次のことを試してください。

eval mkdir -p `echo \
   dir1/{\
      dir1.1/{\
         dir1.1.1,\
         dir1.1.2},\
      dir1.2,\
      dir1.3}\
| sed -E 's/\s*//g'`  

説明: 元のコードではパラメーターにスペースが導入されているため、呼び出す代わりに

mkdir -p dir1/{dir1.1/{dir1.1.1,dir1.1.2},dir1.2,dir1.3}  

実際には、次のパラメーターを使用してコマンドを呼び出しています。

mkdir -p dir1/{ dir1.1/{ dir1.1.1, dir1.1.2}, dir1.2, dir1.3}

これが、間違ったディレクトリが作成された理由です。したがって、これを解決するために、最初に を使用して空白を取り除き、sed次に を使用evalして結果のコマンドを評価しました。このソリューションは単純なケースでは機能しますが、ディレクトリ名内の一部の特殊文字 (空白など) が問題を引き起こす可能性があります。

お役に立てれば!

于 2013-09-20T09:38:46.113 に答える
2

問題は、各行の先頭に空白があるため、行が mkdir コマンドの異なる引数として扱われることです。これを克服するには、次のことができます。

mkdir -p \
dir1/{\
dir1.1/{\
dir1.1.1,\
dir1.1.2},\
dir1.2,\
dir1.3} 

先頭に空白はありません。これが最初のコマンドより読みやすいかどうかは議論の余地があります。

于 2013-09-20T09:38:56.343 に答える