私はUnixをオンラインで学んでおり、階層構造を作成するためにこの質問に出会いました。 mkdir
コマンドを使用してディレクトリを作成しましたが、ディレクトリ内にファイルを作成中にスタックしています。
ディレクトリを作成するための私のコマンドは
mkdir -p mydir/{colors/{basic,blended},shape,animals/{mammals,reptiles}}
これを行うには2つの方法があります。他にもありますが、コンセプトは同じです。つまり、持っているものを拡張するか、リストを反復処理して各リスト項目をパーツに分割します。
touch
で行う必要のある特別なことはありません。 mkdir
コマンドで使用したものと同じ引数を単純に拡張して、ファイルを組み込みます。
bash-4.3$ mkdir -p mydir/{colors/{basic,blended},shape,animals/{mammals,reptiles}}
bash-4.3$ tree mydir
mydir
├── animals
│ ├── mammals
│ └── reptiles
├── colors
│ ├── basic
│ └── blended
└── shape
7 directories, 0 files
bash-4.3$ touch mydir/{colors/{basic/{red,blue,green},blended/{yellow,orange,pink}},shape/{circle,square,cube},animals/{mammals/{platipus,bat,dog},reptiles/{snakes,crocodile,lizard}}}
bash-4.3$ tree mydir
mydir
├── animals
│ ├── mammals
│ │ ├── bat
│ │ ├── dog
│ │ └── platipus
│ └── reptiles
│ ├── crocodile
│ ├── lizard
│ └── snakes
├── colors
│ ├── basic
│ │ ├── blue
│ │ ├── green
│ │ └── red
│ └── blended
│ ├── orange
│ ├── pink
│ └── yellow
└── shape
├── circle
├── cube
└── square
確認すると、すべてのディレクトリに作成するファイルがあります。したがって、できることは、アイテムのリスト(実質的にbash配列)を作成し、mkdir
を使用してサフィックスを削除してからtouch
を使用してアイテムを反復処理することです。このような:
bash-4.3$ arr=( mydir/{colors/{basic/{red,blue,green},blended/{yellow,orange,pink}},shape/{circle,square,cube},animals/{mammals/{platipus,bat,dog},reptiles/{snakes,crocodile,lizard}}} )
bash-4.3$ for i in "${arr[@]}"; do mkdir -p "${i%/*}" && touch "$i"; done
bash-4.3$ tree mydir
mydir
├── animals
│ ├── mammals
│ │ ├── bat
│ │ ├── dog
│ │ └── platipus
│ └── reptiles
│ ├── crocodile
│ ├── lizard
│ └── snakes
├── colors
│ ├── basic
│ │ ├── blue
│ │ ├── green
│ │ └── red
│ └── blended
│ ├── orange
│ ├── pink
│ └── yellow
└── shape
├── circle
├── cube
└── square
7 directories, 15 files
サイドノート:ファイル名またはディレクトリ名にスペースがある場合は、それらのアイテムを一重引用符または二重引用符で囲むようにしてください。例:
arr=( mydir/{'with space',without_space/{file1,file2}} )
参照 。