Crie a estrutura de diretórios usando mkdir e toque

3

Estou aprendendo Unix on-line e me deparei com essa pergunta para criar uma estrutura hierárquica. Eu criei os diretórios usando o comando mkdir , mas estou preso ao criar os arquivos dentro do diretório.

Meu comando para criar diretórios é

mkdir -p mydir/{colors/{basic,blended},shape,animals/{mammals,reptiles}}
    
por Neeraj gupta 23.06.2017 / 17:51

2 respostas

6

Aqui estão duas maneiras de fazer isso. Há mais, mas o conceito seria o mesmo: ou estender o que você tem, ou iterar em uma lista e dividir cada item da lista em partes.

Longo caminho para fazer isso

Não há nada de especial que precise ser feito com touch . Simplesmente estenda os mesmos argumentos que você tinha para o comando mkdir para incluir arquivos.

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

Caminho curto

Se você observar, todos os seus diretórios possuem arquivos para criar. Assim, o que podemos fazer é criar uma lista de itens (efetivamente um array bash) e iterar sobre eles, usando mkdir com remoção de sufixo e, em seguida, touch . Assim:

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

Nota: se você tiver espaços em qualquer arquivo ou nome de diretório, certifique-se de citar uma ou duas citações desses itens, por exemplo:

arr=( mydir/{'with space',without_space/{file1,file2}} )

Veja também .

    
por Sergiy Kolodyazhnyy 23.06.2017 / 20:13
-2
 mkdir -p mydir/{colors/{basic,blended},shape,animals/{mammals,reptiles}}
 touch mydir/colors/{basic/{red,blue,green},blended/{yellow,orange,pink}}
 touch mydir/shape/{circle,square,cube}
 touch mydir/animals/{mammals/{platypus,bat,dog},reptiles/{snakes,crocodile,lizard}}

esta é a solução perfeita .....

    
por Suresh M karthick 26.09.2017 / 20:17