bash. Прокомментируйте пожалуйста выражение

Linux unix bash

Мне нужно опертивненько разобраться с выражением без чтения документаций.
Руководства я обязательно прочитаю и не буду донимать примитивными вопросами.

Прокомментируйте пожалуйста такое:
find ./* -maxdepth 0 -type d -exec tar cjf '{}'_$(date +%d-%m-%Y).tar.bz2 '{}' \;

что здесь значит $ (знак доллара), '{}' (пустые двойные кавычки в начале и конце), \; (экранированое двоеточие)
и популярно про -exec

спасибо

Примечание:
inspirra, Малёк, forajump, avp210159
Учителя, искренне Вам благодарен. Разжевали прямо скажем. Приятно удивлен и очень надеюсь, что стану и Вам в свое время полезен
Ответы:
"-maxdepth 0" искать только в текущем каталоге, не углубляясь
"-type d" - только директории
"tar cjf" - заархивировать и сжать используя bzip2
"'{}'_$(date +%d-%m-%Y)" - {имя найденого каталога}_$(вывод команды date).tar.bz2
"\;" конец аргумента -exec
$() - выполнить то, что написано в скобках, и подставить получившийся вывод в строку. В данном случает там вызов команды date, результатом будет дата. То есть выражение примет какой-то такой вид: find ./* -maxdepth 0 -type d -exec tar cjf '{}'_20-09-2010.tar.bz2 '{}' \;
Это выполнение действий над файлами по шаблону (расширение tar.bz2, имя файла состоит из даты) в юниксоподобной ОС:
./* — во всех вложенных директориях текущей директории;
-maxdepth 0 — глубина поиска в 0 уровней (действия только тестируются на файлах, изменения не вносятся);
-type d — поиск директорий;
-exec — опция выполнения действий, где tar cjf — создание архива TAR, сжатого алгоритмом BZIP2; '{}'_$(date +%d-%m-%Y).tar.bz2 '{}' — собственно сам шаблон.
В шаблоне символ $ определенно означает строку, фигурные кавычки и точка с запятой объясняются структурой параметра -exec, экранирование символов (фигурных скобок непарными кавычками, точка с запятой — обратным слешем) требуется в некоторых случаях (значит и в этом, точно не объясню).
Все это есть в руководствах по конкретным командам, как непосредственно вызываемых в консоли командой man (man find, man tar), так и в интернетах.
Обрати внимание первый аргумент ./* , а второй -maxdepth 0
это обеспечивает выполнение tar только для директорий
содержащихся в текущей, исключая ее саму.
Перед \; нужен пробел.
Для директорий ./d1 ./d2 получим выполнение команд:
tar cjf ./d1_20_09_2010.tar.bz2 ./d1
tar cjf ./d2_20_09_2010.tar.bz2 ./d2


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.