すべてのサブディレクトリにディレクトリを作成するには?

すべてのサブディレクトリにディレクトリを作成するには?

次のディレクトリ構造があるとします。

$[~/練習]ls
ABCD/

tmp1今、すべてのサブディレクトリにディレクトリを作成したいと思いますpractice。次の操作を行います。

$[~/練習] mkdir */tmp1
mkdir: `* / tmp1 'ディレクトリを作成できません:そのファイルまたはディレクトリがありません

その後、切り替えを試み、サブディレクトリの名前を付けたディレクトリ-pで終わりました。*tmp1

$[~/練習] mkdir -p */tmp1

$[~/練習]ls
*/ABCD/

私はスイッチの目的が-p存在しない複数のディレクトリを作成することを知っています。私はこれが役に立つと思いました。

tmp1同時に、すべてのサブディレクトリを作成する方法は?

これが可能であれば、どのように拡張してすぐに、、\tmp1in 、\tmp2およびを生成できますか?\tmp3\a\b\c

編集する:ディレクトリが、等のように単純で秩序整然とする必要はなく、a作成されるディレクトリが、などのようなものである必要はないという点は言及しませんでした。bctmp1tmp2

$[~/練習]ls
犬/猫/ラット/

その中で私は次のようなものが欲しい

$[~/練習]ls*
犬:
赤、青/

猫:
赤、青/

マウス:
赤、青/

答え1

そして:

for dir in */; do mkdir -- "$dir/tmp1"; done

ノート

  • */私はディレクトリ(ディレクトリへのシンボリックリンクを含む)を処理するために小さなトリックをglobとして使用します。
  • 一度に複数のサブディレクトリを作成するには、次の手順を実行します。

    for dir in */; do mkdir -- "$dir"/{tmp1,foo,bar,qux}; done

答え2

[...] \a、\b、および\cに\tmp1、\tmp2、\tmp3を同時に生成するにはどうすればこれを拡張できますか?

 mkdir {a,b,c}/tmp{1,2,3}

答え3

GNUまたはBSD *を使用して以下を見つけます。

find -mindepth 1 -maxdepth 1 -type d -exec mkdir {}/newdir \;

または、パラメーター拡張を使用してください。

dirs=(*/)
mkdir -- "${dirs[@]/%/newdir}"

*OS Xを含む

答え4

移植可能には親ディレクトリを繰り返します。

for d in */; do mkdir "$d/red" "$d/blue"; done

名前で始まるディレクトリがある場合は、--後に追加します。mkdir-

zshでは、次のコマンドを使用して単一のコマンドでこれを実行できます。e グローバル予選:

mkdir *(/e\''REPLY=($REPLY/{red,blue})'\')

しかし、2つのコマンドで入力する方が高速です。

d=(*(/)); mkdir $^d/{red,blue}

関連情報