いくつかのサブディレクトリを含むディレクトリがあり、それらの各サブディレクトリに同じ名前のディレクトリを作成するとします。
./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
一致がない場合、グロブは何も展開されません。--
in mkdir
(ハイフンで始まる名前のディレクトリがある場合、mkdir
それをオプションとして解釈しようとして混乱することはありません)。これにより、隠しディレクトリが黙って無視されます。隠しディレクトリでこの操作を実行する必要がある場合は、行shopt -s nullglob
を次のように置き換えます。
shopt -s nullglob dotglob
dotglob
グロブが隠しファイル/ディレクトリも考慮するようにします。
を 1 回だけ呼び出したい場合mkdir
:
shopt -s nullglob
dirs=( */ )
mkdir -- "${dirs[@]/%/newdir}"
ディレクトリのみをリストすることをお勧めします。そうしないと、ディレクトリではなくファイルに遭遇したときに大量のエラーが発生する可能性があります
for dir in $(ls -d */); do
mkdir "$dir/2015"
done