假设我有这样的目录结构:
$ [~/练习] 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
、\tmp3
in\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})'\')
但将其作为两个命令输入会更快:
d=(*(/)); mkdir $^d/{red,blue}