# Примеры для разбора домашней работы
## Домашнее задание Linux: Работа с файлами (1.2)
### Различия между [] и {}
```
[devops@devops100 test]$ ls -la
итого 0
drwxrwxr-x. 2 devops devops 6 окт 3 14:07 .
drwx------. 3 devops devops 125 окт 3 13:49 ..
[devops@devops100 test]$ echo touch m[xy]m
touch m[xy]m
[devops@devops100 test]$ echo touch m{x,y}m
touch mxm mym
[devops@devops100 test]$ touch m{x,y}m
[devops@devops100 test]$ ls -la
итого 0
drwxrwxr-x. 2 devops devops 28 окт 3 14:08 .
drwx------. 3 devops devops 125 окт 3 13:49 ..
-rw-rw-r--. 1 devops devops 0 окт 3 14:08 mxm
-rw-rw-r--. 1 devops devops 0 окт 3 14:08 mym
[devops@devops100 test]$ echo touch m[xy]m
touch mxm mym
[devops@devops100 test]$
```
При наличии или отсутсвии файлов, подходящих под маску, квадратные скобки ведут себя по-разному:
```
[devops@devops100 test]$ echo touch m[xy]m
touch m[xy]m
...
[devops@devops100 test]$ echo touch m[xy]m
touch mxm mym
```
Когда файлов под маску нет, то создастся файл с именем буквально, как в маске. Если же есть, то "развернет" соотвествующие имена.
В случае создания файлов нужно использовать {} - тогда строки генерируются, а не выбираются из имен существующих файлов.
### Создание файлов
#### Ошибка !!! (созданы директории вместо файлов)
```
mkdir -p 1/1/file.txt 1/2/file.txt 1/3/file.txt 1/4/file.txt 1/5/file.txt
```
#### Пятью командами
```
mkdir -p {1..4}/{1..5}
touch 1/{1..5}/file.txt
touch 2/{1..5}/file.txt
touch 3/{1..5}/file.txt
touch 4/{1..5}/file.txt
```
#### С циклами (знания за рамками данной темы от Алексея Кулакова)
```
mkdir -p ./{1,2,3,4}/{1,2,3,4,5}
for i in [1-4] ; do
touch ./${i}/{1,2,3,4,5}/file.txt -d "Sun, 2${i} Feb 2004 16:21:42 +0300"
done
```
#### Bash-script (знания за рамками данной темы от Марата Бирюшева)
```
#!/usr/bin/env bash
for i in {1..4}
do
for j in {1..5}
do
DIR=${i}/${j}
FILE=${DIR}/file.txt
mkdir -p ${DIR}
touch ${FILE}
touch -d "$(date -R -r ${FILE}) - ${i} hours" ${FILE}
done
done
```
#### Bash-script (знания за рамками данной темы от Никиты Царёва)

#### В одну строку с && и циклом (знания за рамками данной темы от Алексея Зиновина)
```
mkdir 1 && cd 1 && touch file.txt && mkdir {1..5} && for i in 1 2 3 4 5; do cp file.txt ${i}/; done
```