Работая в консоли, у вас вырабатываются некоторые привычки, шаблоны. Это некоторые «просветления», как надо делать некоторые вещи. Общие, не связанные с конкретной задачей. Это и есть те небольшие крупицы, из которых и складывается понимание шелла (оболочки командной строки). Давайте разберём некоторые из них — быть может у вас добавится ещё 10 крупинок в вашу тележку со знаниями.
Сразу скажу, что эта заметка навеяна англоязычной статьёй от IBM. Мне она показалась неплохой для новичков. Но некоторые моменты мне бы хотелось осветить по-своему, дать свои комментарии.
- Создавайте дерево директорий одним запросом
Предположим, нам нужно создать несколько директорий. Простой и плохой способ сделать это:
~ $ mkdir tmp ~ $ cd tmp ~/tmp $ mkdir a ~/tmp $ cd a ~/tmp/a $ mkdir b ~/tmp/a $ cd b ~/tmp/a/b/ $ mkdir c ~/tmp/a/b/ $ cd c ~/tmp/a/b/c $
Сразу хочу сказать. Нижеописанные способы — это прекрасно для понимания Unix, для понимания bash, но это иной раз печально, когда продуктовый код изобилует этим. Тема эта обширная, но важная — поэтому напишу в другой заметке.
Теперь рассмотрим некоторые возможности команды mkdir (подробнее можно ознакомиться в man mkdir). Одним из наиболее часто используемых ключей этой утилиты является «-p» — если нет промежуточного пути — создать и его.
То есть, предположим нам надо создать папку «/home/bugov/Project/9000913/website/html/css/main/», при том, что даже папки Project нет. Если мы это сделаем через простой mkdir:
home:~ Gosha$ mkdir /home/Gosha/Project/9000913/website/html/css/main/ mkdir: /home/Gosha/Project/9000913/website/html/css: No such file or directory
С другой стороны вы можете использовать всего 1 ключ «-p» — и весь путь до папки и сама папка создадутся, как вы и хотели.
home:~ Gosha$ mkdir -p /home/Gosha/Project/9000913/website/html/css/main/
И здесь можно сделать фокус на том, что «ребята, у утилиты mkdir есть ключ -p». Мне же кажется, что куда важнее то, что у всех утилит, которые вы используете, есть сотни ключей, которые могу сильно упростить жизнь.
Но можно сделать создание папок ещё более «интересным». Предположим, нам нужно сделать такую структуру папок:
. └── project ├── bin ├── demo │ └── stat │ └── a ├── doc │ ├── html │ ├── info │ └── pdf ├── lib │ └── ext └── src
И даже это можно сделать одной командой:
home:~ Gosha$ mkdir -p \ project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
Вся суть здесь, естественно в конструкциях {что-то,что-то}
. Эта конструкция говорит о том, что сейчас идёт перечисление поддиректорий, которые надо создать. То есть сначала создаём ./project, а дальше разворачиваем первые скобочки:
- создай поддиректорию lib, а в ней ext,
- создай bin,
- создай папку src,
- создай каталог doc, в котором (пошли вложенные скобочки):
- поддиректории html, info, pdf,
- ну и добавь папку demo/stat/a.
Вот таким образом можно создание целого дерева директорий также сделать одной командой. Это здорово, что bash позволяет делать такое. Это здорово, когда нужно быстро что-то сделать и одна строчка решает проблему.
Но это не здорово, когда приходится возвращаться к такому коду, исправлять его. Используйте это знание с умом и читайте дальше!