假设我有一个包含许多子目录的目录,并且我想在每个子目录中创建一个同名的目录:
./dir-1
./dir-2
...
./dir-n
我想执行 mkdir */new-dir
但是这会报错。最好的解决方法是什么?
for dir in $(ls); do
mkdir "$dir/new-dir"
done
find . -type d | xargs -I "{x}" mkdir "{x}"/new-dir
如果你想将它缩减到第一层目录,请使用以下命令
find . -maxdepth 1 -type d | xargs -I "{x}" mkdir "{x}"/new-dir
很惊讶这个问题从来没有得到过一个合理的答案:
shopt -s nullglob
for i in */; do
mkdir -- "${i}newdir"
done
shopt -s nullglob
使得如果没有匹配,glob会扩展为 nothing。--
在 mkdir
中标记选项的结束(如果有以连字符开头的目录名,则不会混淆 mkdir
尝试将其解释为选项)。这样就会忽略隐藏的目录。如果您需要在隐藏的目录上执行此操作,请用以下行替换 shopt -s nullglob
:
shopt -s nullglob dotglob
使用dotglob
选项可以使通配符也考虑隐藏文件/目录。
如果您只想调用一次mkdir
:
shopt -s nullglob
dirs=( */ )
mkdir -- "${dirs[@]/%/newdir}"
for dir in $(ls -d */); do
mkdir "$dir/2015"
done
ls
的输出。谢谢。 - gniourf_gniourf