次のディレクトリ構造があるとします。
$[~/練習]ls ABCD/
tmp1
今、すべてのサブディレクトリにディレクトリを作成したいと思いますpractice
。次の操作を行います。
$[~/練習] mkdir */tmp1 mkdir: `* / tmp1 'ディレクトリを作成できません:そのファイルまたはディレクトリがありません
その後、切り替えを試み、サブディレクトリの名前を付けたディレクトリ-p
で終わりました。*
tmp1
$[~/練習] mkdir -p */tmp1 $[~/練習]ls */ABCD/
私はスイッチの目的が-p
存在しない複数のディレクトリを作成することを知っています。私はこれが役に立つと思いました。
tmp1
同時に、すべてのサブディレクトリを作成する方法は?
これが可能であれば、どのように拡張してすぐに、、\tmp1
in 、\tmp2
およびを生成できますか?\tmp3
\a
\b
\c
編集する:ディレクトリが、等のように単純で秩序整然とする必要はなく、a
作成されるディレクトリが、などのようなものである必要はないという点は言及しませんでした。b
c
tmp1
tmp2
$[~/練習]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}