5

いくつかのサブディレクトリを含むディレクトリがあり、それらの各サブディレクトリに同じ名前のディレクトリを作成するとします。

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

私はやってみたいですmkdir */new-dir

しかし、これはエラーをスローします。これについて最善の方法は何ですか?

4

4 に答える 4

8
for dir in $(ls); do
  mkdir "$dir/new-dir"
done
于 2013-06-25T06:49:53.260 に答える
3
find . -type d | xargs -I "{x}" mkdir "{x}"/new-dir

ディレクトリの最初のレベルに減らしたい場合は、

find . -maxdepth 1 -type d | xargs -I "{x}" mkdir "{x}"/new-dir
于 2013-06-25T06:56:14.263 に答える
2

この質問に正気の答えが得られなかったのは驚くべきことです。

shopt -s nullglob
for i in */; do
    mkdir -- "${i}newdir"
done
  • これは、ファイル名のおかしな記号 (スペース、ワイルドカードなど) に関して 100% 安全です。
  • shopt -s nullglob一致がない場合、グロブは何も展開されません。
  • オプションの終わりを示す--in mkdir(ハイフンで始まる名前のディレクトリがある場合、mkdirそれをオプションとして解釈しようとして混乱することはありません)。

これにより、隠しディレクトリが黙って無視されます。隠しディレクトリでこの操作を実行する必要がある場合は、行shopt -s nullglobを次のように置き換えます。

shopt -s nullglob dotglob

dotglobグロブが隠しファイル/ディレクトリも考慮するようにします。

を 1 回だけ呼び出したい場合mkdir:

shopt -s nullglob
dirs=( */ )
mkdir -- "${dirs[@]/%/newdir}"
于 2014-04-30T22:02:34.270 に答える
0

ディレクトリのみをリストすることをお勧めします。そうしないと、ディレクトリではなくファイルに遭遇したときに大量のエラーが発生する可能性があります

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

于 2014-04-30T21:59:21.550 に答える