Создайте структуру каталогов с помощью mkdir и коснитесь

Я изучаю Unix онлайн, и я столкнулся с этим вопросом, чтобы создать иерархическую структуру. Я создал каталоги с помощью команды mkdir, но застрял при создании файлов внутри каталога.

Directory Structure to be created

Моя команда для создания каталогов:

mkdir -p mydir/{colors/{basic,blended},shape,animals/{mammals,reptiles}}
5
задан 23 June 2017 в 21:21

2 ответа

1110 Вот два способа сделать это. Это еще не все, но концепция будет такой же: либо расширять то, что у вас есть, либо перебирать список и разбивать каждый элемент списка на части.

Долгий путь сделать это

Нет ничего особенного, что нужно делать с 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}} )

См. Также .

0
ответ дан 23 June 2017 в 21:21
 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}}

это - идеальное решение.....

0
ответ дан 24 June 2017 в 07:21

Другие вопросы по тегам:

Похожие вопросы: