web-dev-qa-db-ja.com

mkdirを使用してディレクトリ構造を作成し、タッチします

私はUnixをオンラインで学んでおり、階層構造を作成するためにこの質問に出会いました。 mkdirコマンドを使用してディレクトリを作成しましたが、ディレクトリ内にファイルを作成中にスタックしています。

Directory Structure to be created

ディレクトリを作成するための私のコマンドは

mkdir -p mydir/{colors/{basic,blended},shape,animals/{mammals,reptiles}}
5
Neeraj gupta

これを行うには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}} )

参照

9