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

时间:2013-06-25 06:47:20

标签: bash shell directory

假设我有一些目录,其中包含许多子目录,并且在每个子目录中我想创建一个具有相同名称的目录:

./dir-1
./dir-2
...
./dir-n

我想mkdir */new-dir

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

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

如果要将其减少到第一级目录,请使用

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

答案 2 :(得分:2)

令人惊讶的是,这个问题从来没有得到一个明智的答案:

shopt -s nullglob
for i in */; do
    mkdir -- "${i}newdir"
done
  • 这对于文件名(空格,通配符等)中的有趣符号是100%安全的。
  • shopt -s nullglob,以便在没有匹配项时,glob会扩展为空。
  • --中的mkdir标记选项的结尾(如果名称以连字符开头的目录,并不会混淆mkdir尝试将其解释为一种选择)。

这会默默地忽略隐藏的目录。如果您需要对隐藏目录执行此操作,只需将行shopt -s nullglob替换为以下内容:

shopt -s nullglob dotglob

dotglob以便整体也考虑隐藏文件/目录。

如果您只需要调用一次mkdir

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

答案 3 :(得分:0)

最好只列出目录,否则在遇到文件而不是目录时可能会遇到一堆错误

for dir in $(ls -d */); do mkdir "$dir/2015" done