# Примеры для разбора домашней работы ## Домашнее задание 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 ```