31 октября 2009 г.

Возможности команды mkdir

По мере изучения Ubuntu открываю для себя замечательные возможности командной строки (терминала). Одна из них - возможность решать простые задачи так же просто, как они этого требуют.
Мне недавно нужно было создать несколько каталогов в одном - казалось бы, простая задача. Если каталогов один или два, мы можем сделать это простым кликом правой кнопки мыши и выбором пункта контекстного меню "Создать папку". Или нажать Ctrl+Shift+N (эта комбинация клавиш создаёт новый каталог в текущем). Просто, не правда ли? Но если нам нужно создать много каталогов, да ещё и в каждом каталоге ещё подкаталоги? Создать папку, и ещё папку, и ещё, клик, клик, клик... А ведь каждой папке ещё и название нужно дать! Причём, такая задача не является редкостью и может возникнуть просто в процессе работы пользователя. Кажется, задача простая, но решение её может оказаться чрезмерно сложным и долгим. И тут как раз очень помогает знание простейших команд терминала.
Команда mkdir (от англ. make directory) предназначена для создания каталогов. Сначала я недооценивал возможности этой команды, но моё мнение на её счёт изменилось, когда нужно было решить задачу наподобие той, что описана выше. Рассмотрим самый простой вариант использования этой команды. Предположим, нам нужно создать в /home/username/Музыка структуру каталогов для музыкальной коллекции (фонотеки), где username - ваше имя пользователя. Если вы, как и я, любите порядок, то структура каталога "Музыка" примет у вас примерно следующий вид

~/Музыка/A/(все исполнители на А)
         B/(все исполнители на B)
         C/
         D/
         ...

Для экспериментов я всё же рекомендую создать для начала новый пустой каталог, а потом, когда уже будет понятен принцип работы команды, можно начать применять её на практике. Открываем терминал и пишем:

mkdir ~/mkdirexp

Теперь выбираем нужный нам каталог - для этого предназначена команда cd (от англ. change dir) :

cd ~/mkdirexp/

Теперь создаём все каталоги командой:

mkdir A B C D E F G I J K L M N O P Q R S T U V W X Y Z

Просто, верно? Но что делать, если у нас до этого музыка была свалена в один каталог, и в одной куче были разные исполнители и альбомы? Определим задачу: нужно создать структуру каталогов и необходимые подкаталоги (перенесение музыки во вновь созданные каталоги я не буду сейчас рассматривать - хотя и здесь несомненно есть широкие возможности для упрощения и автоматизации) :

~/mkdirexp/A/A_исполнитель_1/2007 - Альбом 1/
             A_исполнитель_1/2008 - Альбом 2/
             A_исполнитель_2/
           B/B_исполнитель_1/
           C/
           D/
           ...

С помощью команды mkdir делается это так же просто, как и в предыдущем примере.
Если вы выполняли команду из предыдущего примера, то в каталоге mkdirexp у вас уже должны быть подкаталоги. Для наглядности следующего примера попрошу удалить их - зайдите в каталог mkdirexp, выделите все подкаталоги (Ctrl+A) и удалите их (Shift+Del - для удаления файлов без помещения в корзину).
Я не буду в данном примере создавать все каталоги - нам главное понять принцип работы, или, если хотите, синтаксис команды:

mkdir -p A/{A_исполнитель_1/{"2007 - Альбом 1","2008 - Альбом 2"},A_исполнитель_2} B/B_исполнитель_1

Посмотрим на команду: параметр -p (от англ. parents), передаваемый команде, означает, что нужно создать все "родительские" каталоги для подкаталогов, если они отсутствуют. Если мы упустим этот параметр, то получим сообщение об ошибке и часть каталогов не будет создана. В фигурных скобках через запятую перечислены подкаталоги, которые требуется создать. Причём, как видно из примера, можно создавать подкаталоги в подкаталогах и т. д. Названия папок наподобие "2007 - Альбом 1" заключены в кавычки, т. к. в именах есть пробелы - то есть, мы говорим команде, что это одно имя, а не несколько, разделённых пробелами.

Подробную справку о всех параметрах команды mkdir и других командах терминала можно узнать, набрав в терминале man mkdir или man имя_команды.

Комментариев нет:

Отправить комментарий