2013-06-25 9 views
5

内のすべてのディレクトリのサブディレクトリを作成します。私はサブディレクトリの数が含まれているいくつかのディレクトリを、持っている、と私は同じ名前のディレクトリを作成したい、これらのサブディレクトリのそれぞれに仮定したフォルダ

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

私が欲しいです行うことmkdir */new-dir

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

答えて

6
for dir in $(ls); do 
    mkdir "$dir/new-dir" 
done 
3
find . -type d | xargs -I "{x}" mkdir "{x}"/new-dir 

あなたはディレクトリの最初のレベルにそれを減らしたい

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

良いがそうでなければディレクトリのみをリストするために使用している場合ではなく、ファイルに遭遇したとき、あなたは、エラーの束を得ることができますディレクトリの

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

+0

、ls' 'の出力を解析しないでください:あなたはmkdirの唯一の呼び出しをしたい場合は

。ありがとうございました。 –

3

アメージング、この質問は決してO正気答えbtained:

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グロブも隠しファイル/ディレクトリを考えるようにします。

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

私はあまりにもdownvoted得た驚くべき!怒っている人は、メモを残してください、ありがとうございます。 –

関連する問題