为文件夹中的所有目录创建子目录

5
假设我有一个包含许多子目录的目录,并且我想在每个子目录中创建一个同名的目录:
./dir-1
./dir-2
...
./dir-n

我想执行 mkdir */new-dir

但是这会报错。最好的解决方法是什么?

4个回答

8
for dir in $(ls); do
  mkdir "$dir/new-dir"
done

3
find . -type d | xargs -I "{x}" mkdir "{x}"/new-dir

如果你想将它缩减到第一层目录,请使用以下命令

find . -maxdepth 1 -type d | xargs -I "{x}" mkdir "{x}"/new-dir

2

很惊讶这个问题从来没有得到过一个合理的答案:

shopt -s nullglob
for i in */; do
    mkdir -- "${i}newdir"
done
  • 涉及有趣符号的文件名(空格、通配符等)也是100%安全的。
  • shopt -s nullglob 使得如果没有匹配,glob会扩展为 nothing。
  • --mkdir 中标记选项的结束(如果有以连字符开头的目录名,则不会混淆 mkdir 尝试将其解释为选项)。

这样就会忽略隐藏的目录。如果您需要在隐藏的目录上执行此操作,请用以下行替换 shopt -s nullglob

shopt -s nullglob dotglob

使用dotglob选项可以使通配符也考虑隐藏文件/目录。

如果您只想调用一次mkdir

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

0
最好只列出目录,否则当它遇到文件而不是目录时,您可能会遇到一堆错误。
对于每个目录,使用以下代码创建一个名为“2015”的新目录: for dir in $(ls -d */); do mkdir "$dir/2015" done

请不要解析ls的输出。谢谢。 - gniourf_gniourf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接