Я изучаю Unix онлайн, и я столкнулся с этим вопросом, чтобы создать иерархическую структуру. Я создал каталоги с помощью команды mkdir
, но застрял при создании файлов внутри каталога.
Моя команда для создания каталогов:
mkdir -p mydir/{colors/{basic,blended},shape,animals/{mammals,reptiles}}
Нет ничего особенного, что нужно делать с 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}} )
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}}
это - идеальное решение.....