посоветуйте мануал по написанию однострочников на баше.
man bash
Примеры можно смотреть на commandlinefu.com
$ man bash | head
BASH(1) BASH(1)
NAME
bash - GNU Bourne-Again SHell
SYNOPSIS
bash [options] [file]
на русском желательно.
да и документация и мануал не одно и тоже. но я юмор оценил. спасибо.
какой блин юмор-то? он правильно тебе все советует.
man bash - это блядь книга, которую даже многие хорошие админы читали не целиком.
русскоязычные маны существуют.
можно на экзамплах учиться, да, как Стасег советует, но вот это как раз уже не документация.
а манпэйдж - это самая настоящая документация.
man bash - это блядь книга, которую даже многие хорошие админы читали не целиком.
русскоязычные маны существуют.
можно на экзамплах учиться, да, как Стасег советует, но вот это как раз уже не документация.
а манпэйдж - это самая настоящая документация.
а манпэйдж - это самая настоящая документация.для старта обычно удобнее читать книгу, чем документацию.
в книге изложение идет от простого к сложному, а в документации бывает такую последовательность тяжело выделить (особенно новичку)
может ТС-у книгу и надо?
да. пожалуй я неправильно выразился. хотел бы книгу.
Вот вроде как книга, но не совсем про однострочники:
This tutorial assumes no previous knowledge of scripting or programming, but progresses rapidly toward an intermediate/advanced level of instruction . . . all the while sneaking in little nuggets of UNIX® wisdom and lore. It serves as a textbook, a manual for self-study, and a reference and source of knowledge on shell scripting techniques. The exercises and heavily-commented examples invite active reader participation, under the premise that the only way to really learn scripting is to write scripts.
This book is suitable for classroom use as a general introduction to programming concepts.
прочитал пока 1/3 от неё. в русском переводе. в принципе они всё подробно разъясняют. но я мозги свернул в трубочку пока читал. мало объяснений. много примеров. и там скорее всё-таки о программирование на языке bash а например awk grep и sed почти не освещены.
awk grep и sed почти не освещены.Ну ты же догадаешься, какие man'ы тебе для этого почитать, да?
ну ты же догадался куда тебе идти?
> прочитал пока 1/3 от неё <...> мозги свернул в трубочку пока читал.
Ну да, автор честно предупреждают (и я с ним согласен что "the only way to really learn scripting is to write scripts".
> например awk grep и sed почти не освещены.
Про полезные внешние команды (в т.ч. grep) есть раздел "16. External Filters, Programs and Commands", минимальное введение в sed и awk в есть приложении C.
А вообще sed и awk это полноценные языки программирования, и их детальное изучение, как мне кажется, несколько выходит за рамки "однострочников на баше".
Ну да, автор честно предупреждают (и я с ним согласен что "the only way to really learn scripting is to write scripts".
> например awk grep и sed почти не освещены.
Про полезные внешние команды (в т.ч. grep) есть раздел "16. External Filters, Programs and Commands", минимальное введение в sed и awk в есть приложении C.
А вообще sed и awk это полноценные языки программирования, и их детальное изучение, как мне кажется, несколько выходит за рамки "однострочников на баше".
ну ты же догадался куда тебе идти?Не хочешь, как хочешь. Я не знаю другого способа научиться писать скрипты, кроме как, читая ABSG и ман-страницы и создавая скрипты.
Нет, можно конечно купить какую-нибудь книжку с названием типа "Консоль Linux", но лучшее, на что при этом можно рассчитывать — эволюция в пиздоскриптолога.
чтобы быть пиздоскриптологом вообще никаких книг не нужно.
я этим занимался в самом начале освоения линукса.
я этим занимался в самом начале освоения линукса.
ну я, кстати, тоже пизжу скрипты и делаю их под себя.
по-моему, лучший способ написать код - спиздить его.
зачем писать свой, когда дохуя готового?
осталось только спиздить и допилить под себя / текущую задачу.
по-моему, лучший способ написать код - спиздить его.
зачем писать свой, когда дохуя готового?
осталось только спиздить и допилить под себя / текущую задачу.
Ну ты же догадаешься, какие man'ы тебе для этого почитать, да?по sed'у ман слишком лаконичен. По sed'у могу посоветовать http://www.gentoo.org/doc/en/articles/l-sed1.xml и далее, там три части, по awk начать опять же можно с http://www.gentoo.org/doc/en/articles/l-awk1.xml.
Дальше по sed'у можно почитать info sed, там с примерами тоже, в том числе с крутыми. Еще для прокачки однострочности можно поглядеть info coreutils, там тоже все разобрано. Там в info coreutils можно начать прямо с главы 29 «Opening the software toolbox», там в некотором смысле совсем для новичков, но я читал пару месяцев назад, помню, что увидел там что-то новое

Один минус: надо уметь читать info

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

на самом деле объясняется просто. скорость моего чтения на русском очень велика. я не верю что когда-нибудь скорость моего чтения на английском приблизится к этой величине. чтение на такой скорости мне доставляет удовольствие, даже если я читаю женский роман. техническая литература читается конечно медленнее, но тоже с комфортной для меня скоростью и доставляет удовольствие. чтение с другой скоростью напоминает пытку.
по awk начать опять же можно с http://www.gentoo.org/doc/en/articles/l-awk1.xml.нашёл приятный мануал. http://www.lissyara.su/doc/programming/awk/
Я изучал shell по классике. bash правда там не рассматривается, так как на момент написания книги его ещё не существовало. Но если тебе главное язык, а не конкретная реализация, то есть смысл посмотреть:
Керниган, Пайк - UNIX – универсальная среда программирования.
Керниган, Пайк - UNIX – универсальная среда программирования.
с седом стало получше. но awk и собственно сам баш взрывают мне мозг.
с седом стало получше. но awk и собственно сам баш взрывают мне мозг.RLY?
Из трёх перечисленных awk самый вменяемый, по-моему. Типа, нормальный язык программирования, куча кусочков кода, которые триггерятся регекспом перед ними (или особыми словами типа BEGIN, END а внутри всё как у людей, обычные переменные, обычные параметры, всё такое. Сам язык похож на С и жаваскрипт.
Баш стремнее, но моё общение с ним стало несколько легче когда я обнаружил single-quote strings (FYI, to escape a single quote inside one you write '\''). Ну и осознал, как всякие if работают.
Сед же состоит из какого-то непознаваемого пиздеца. Я настолько не хочу в него вдаваться, что даже написал себе питоноскрипт который как бы применяет s/.../.../g, но с питоновскими регекспами.
да, sed - пиздецовый язык.
да, sed - пиздецовый язык.да и авк с башем пиздецовые языки.
> документация и мануал не одно и тоже
вообще-то man это от слова manual
вообще-то man это от слова manual

Мануал и мануал — не одно и то же. 

ну ладно. признаю: хуйню сморозил. хорош стебаться.
лучше подскажите идею для решения задачки:
посчитать размер всех мп3 файлов в каталоге и всех подкаталогах и вывести одной строкой. уложиться в минимальное кол-во знаков. решение через ls -lR | awk 'бла-бла' занимает около 40 символов
через du -ca **/*.mp3 | tail -1 меньше но требует либо zsh илбо включение рекурсивного глобинга в баше, что занимает существеное кол-во символов.
как-то больше идей нет.
лучше подскажите идею для решения задачки:
посчитать размер всех мп3 файлов в каталоге и всех подкаталогах и вывести одной строкой. уложиться в минимальное кол-во знаков. решение через ls -lR | awk 'бла-бла' занимает около 40 символов
через du -ca **/*.mp3 | tail -1 меньше но требует либо zsh илбо включение рекурсивного глобинга в баше, что занимает существеное кол-во символов.
как-то больше идей нет.
Короче вряд ли сделаешь.
du -ca $(find . -name '*.mp3') | tail -n 1— это 42 символа.
echo -n 'du -c `find -name \*.mp3` | tail -1' | wc -c:-p
35
ну еще пробелы вокруг пайпа удалите, да
echo -n 'du -c `find -name \*.mp3`|tail -1' | wc -c
33

Апиридил! 

ну твоё решение как минимум можно сократить до
но это решение не работает при наличии пробелов в именах файлов.
du -ca $(find . -name '*.mp3')|tail -1а это уже 38 символов
но это решение не работает при наличии пробелов в именах файлов.
find -name \*.mp3`|tail -1N130:~/music$ du -c `find -name \*.mp3`|tail -1
du: невозможно получить доступ к «./Lumen/2011»: Нет такого файла или каталога
du: невозможно получить доступ к «-»: Нет такого файла или каталога
du: невозможно получить доступ к «Лабиринт/004»: Нет такого файла или каталога
du: невозможно получить доступ к «-»: Нет такого файла или каталога
du: невозможно получить доступ к «Дотянуться»: Нет такого файла или каталога
du: невозможно получить доступ к «до»: Нет такого файла или каталога
du: невозможно получить доступ к «звезды»: Нет такого файла или каталога
du: невозможно получить доступ к «(Санкт-Петербург»: Нет такого файла или каталога
du: невозможно получить доступ к «29.10.2010).mp3»: Нет такого файла или каталога
du: невозможно получить доступ к «./Lumen/2011»: Нет такого файла или каталога
du: невозможно получить доступ к «-»: Нет такого файла или каталога
du: невозможно получить доступ к «Лабиринт/009»: Нет такого файла или каталога
du: невозможно получить доступ к «-»: Нет такого файла или каталога
du: невозможно получить доступ к «Пора»: Нет такого файла или каталога
du: невозможно получить доступ к «орать!»: Нет такого файла или каталога
du: невозможно получить доступ к «(Омск»: Нет такого файла или каталога
du: невозможно получить доступ к «15.10.2010).mp3»: Нет такого файла или каталога
du: невозможно получить доступ к «./Lumen/2011»: Нет такого файла или каталога
find . -name '*.mp3' | while read name ; do du "$name" ; done | awk '{size += $1} END {print size}'find . -name '*.mp3' | while read name ; do du "$name" ; done | cut -f 1 | tr '\n' ' ' | sed 's/\>/ +/g' | sed 's/^/0 /' | sed 's/$/p/' | dc

du: невозможно получить доступ к «Лабиринт/004»: Нет такого файла или каталогаУбей, пожалуйста, все такие каталоги у себя. Спасибо.
Убей, пожалуйста, все такие каталоги у себя. Спасибо.Убей пожалуйста все такие каталоги во всём мире, включая архивы
спасибо
rm -rf * && echo 0
бля, если кто на фантанах, угощу пивом 

Ты с телефона, что ли, пишешь?
Убей вообще все! Спасибо.
не, у миня ёта 

Скрипт из корректно обрабатывает имена файлов с пробелами, но тебе каждый раз придется с ними так мучаться. Это глупая Windows95™-привычка.
длинноватенько. моё решение:
du -a|awk '/mp3$/{s+=$1}END{print s}' но что-то мне подсказывает его не оптимальность. 37 символов.Оставь пиво, я потом выпью.


Скрипт из корректно обрабатывает имена файлов с пробелами, но тебе каждый раз придется с ними так мучаться. Это глупая Windows95™-привычка.написать скрипт коректно обрабатывающий пробелы - меньший гемор, чем переименовывать свою музыкальную колекцию.
Учитывая, что музыка у меня хранится по альбомам, а некоторые алюбом содежат в названии пробелы. или предлагаешь их везде заменить на подчёркивание?
свои файлы и папки я ясен пень создаю на английском в нижнем регистре без пробелов.
написать скрипт коректно обрабатывающий пробелы - меньший гемор, чем переименовывать свою музыкальную колекцию.Всего-то один раз написать корректно обрабатывающий пробелы скрипт, который переименует всю коллекцию.

Еще теги в UTF-8 переведи.
теги у меня и так в утф 8.
и как ты предлагаешь переименовывать коллекцию? через подчёркивания или просто пробелы все выпилить?
и как ты предлагаешь переименовывать коллекцию? через подчёркивания или просто пробелы все выпилить?
через подчёркивания
ls -r *.mp3 | %{$_.Length} | measure -Sum | %{$_.Sum}
представил себе работу такого скрипта:
music/Jimi_Hendrix/Jimi_Hendrix_-_Experience_Hendrix_-_The_Best_Of_Jimi_Hendrix_[digitally_remastered]2010_(320 kbps)/09._Little_Wing.mp3
ты раб операционной системы, если вынужден терпеть такое. нахуй оно мне надо?
сравни с
music/Jimi Hendrix/Jimi Hendrix - Experience Hendrix - The Best Of Jimi Hendrix [digitally remastered]2010 (320 kbps)/09. Little Wing.mp3
music/Jimi_Hendrix/Jimi_Hendrix_-_Experience_Hendrix_-_The_Best_Of_Jimi_Hendrix_[digitally_remastered]2010_(320 kbps)/09._Little_Wing.mp3
ты раб операционной системы, если вынужден терпеть такое. нахуй оно мне надо?
сравни с
music/Jimi Hendrix/Jimi Hendrix - Experience Hendrix - The Best Of Jimi Hendrix [digitally remastered]2010 (320 kbps)/09. Little Wing.mp3
ls -r *.mp3 | %{$_.Length} | measure -Sum | %{$_.Sum}N130:~/music$ ls -r *.mp3 | %{$_.Length} | measure -Sum | %{$_.Sum}
measure: команда не найдена
%{.Sum}: команда не найдена
%{.Length}: команда не найдена
find_._-name_'*.mp3'_|_while_read_name_;_do_du_"$name"_;_done_|_awk_'{size_+=_$1}_END_{print_size}'
это всё т пива.
ты раб операционной системыЭто мне говорит человек, который каждый раз будет писать скрипт для имен с пробелами, потому что когда-то в ГЗ накачал у кого-то нормального музона с винды.
нахуй оно мне надо?Объясни, пожалуйста, нахуй тебе нужна форма с пробелами. Ты еженедельно распечатываешь список файлов и вешаешь в рамочке?
сравни с
music/Jimi Hendrix/Jimi Hendrix - Experience Hendrix - The Best Of Jimi Hendrix [digitally remastered]2010 (320 kbps)/09. Little Wing.mp3
свои файлы и папки я ясен пень создаю на английском в нижнем регистре без пробелов.это разве не рабство?
Объясни, пожалуйста, нахуй тебе нужна форма с пробелами.потому что это вносит меньше искажений в именование файлов
это разве не рабство?нет. я делаю это не из-за то го что по-другом скрипту работать не будут, а потому что одно слово на английском в нижнем регистре быстрее набрать, когда придумываешь название файла.
find -name '*.mp3' -print0|xargs -0 du -cbsh|tail -1
Чмоке рабам подчёркиваний.
find -name '*.mp3' -print0|xargs -0 du -cbsh|tail -1
N130:~/music$ find -name '*.mp3' -print0|xargs -0 du -cbsh|tail -1
5,7G итого
N130:~/music$ ls -lR|awk '/mp3$/{s+=$5}END{print s/1024^3}'
14.3268
предпочитаю верить второму скрипту. во всяком случае его ответ согласуется с мнением банши, который утверждает что у меня 14.3 гига музыки
ога, выводит размер последнего чанка, который выделил xargs. Чмоке и вам 

выведи wc -l пжалста (количество файлов)
Бля! КОНТРА был прав!
Бля! КОНТРА был прав!когда?
find -name '*.mp3' -print0|xargs -0 du -cbsh|grep итого

>Чмоке рабам подчёркиваний.
угу, чмоке
угу, чмоке
find -name \*mp3 -print0|du -ch --f=-|tail -1
find -name \*mp3 -print0|du -ch --f=-|tail -1а откуда ты узнал что ключ --f равносилен --files0-from ?
в мане такого нет.
опыт, батенька, опыт.
а откуда ты узнал что ключ --f равносилен --files0-from ?обычно в таких случаях читают имена ключей с начала до момента,
в мане такого нет.
когда дальше остался только один допустимый.
например --apparent-size <=> --ap у du
это есть в исходном коде, причем не только у du, а вообще много где.
причем, на это даже не особо опасно рассчитывать.
конечно, если пишешь свой скрипт, который кому-то потом отдашь, лучше писать целиком.
а если руками команду вбиваешь, то вполне не возбраняется так сокращать, имхо.
а диры, кстати, в этих однострочниках когда отфильтровываются? или считается что они не могут помешать?
если в рамках близкого к идеалу синтаксиса, то мне нравится что-то типа:
./:File[mp3].Size => Sum
./:File[.Name=%'.mp3'].Size => Sum
./:File[.Ext=mp3].Size => Sum
ps
. - запрос к текущему контексту
/ - рекурсивный
: - выход из текущего пространства имен
[] - фильтрация
=% - EndsWith, строка оканчивается на данную строку
=> - жадная передача всего предыдущего результата в следующую функцию
- вызов функции
./:File[.Name=%'.mp3'].Size => Sum
./:File[.Ext=mp3].Size => Sum
ps
. - запрос к текущему контексту
/ - рекурсивный
: - выход из текущего пространства имен
[] - фильтрация
=% - EndsWith, строка оканчивается на данную строку
=> - жадная передача всего предыдущего результата в следующую функцию
- вызов функции
а диры, кстати, в этих однострочниках когда отфильтровываются? или считается что они не могут помешать?собственно никак. предполагается что папки вряди будут называться *.mp3
проапрегрйженная версия моего решения
фильтрует на первой стадии.
du -a|awk '/mp3$/{s+=$1}END{print s/1024^2}
но при этом хавает файлы tmp3?
Тебе, как всегда, нравится какой-то вырвиглазный пиздец.
обычный фя
Ну вот не надо.
Ну вот не надо.синдром утенка в запущенной стадии детектед
Прожуй сперва.
Оставить комментарий
YUAL
и лучше потолще по пространнее и с примерами. а то я чё-то гуглом пользоваться разучился.на русском желательно.