---
# System prepended metadata

title: Примеры для разбора домашней работы

---

# Примеры для разбора домашней работы
## Домашнее задание 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 (знания за рамками данной темы от Никиты Царёва)

![](https://i.imgur.com/cz3wLyd.png)

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