假设我有一些目录,其中包含许多子目录,并且在每个子目录中我想创建一个具有相同名称的目录:
./dir-1
./dir-2
...
./dir-n
我想mkdir */new-dir
但这会引发错误。什么是最好的解决方法?
答案 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
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