如何在所有子目录中创建一个目录?

如何在所有子目录中创建一个目录?

假设我有这样的目录结构:

$ [~/练习] ls
A B C D/

现在我想tmp1在所有子目录中创建一个目录practice,我这样做:

$ [~/练习] mkdir */tmp1
mkdir: 无法创建目录 `*/tmp1': 没有这样的文件或目录

然后我尝试-p切换,最终得到一个*以子目录命名的目录tmp1

$ [~/练习] mkdir -p */tmp1

$ [~/练习] ls
*/ A B C D/

我知道switch的用途-p是创建多个不存在的目录。我只是觉得这可能有帮助。

tmp1如何同时在所有子目录中创建?

如果可以做到这一点,我如何扩展它以立即创建\tmp1\tmp2\tmp3in\a\b\c

编辑:我没有提到,目录不必是简单且有序的,例如a,bc,并且要创建的目录不一定是像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})'\')

但将其作为两个命令输入会更快:

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

相关内容