посоветуйте мануал по написанию однострочников на баше.
man bash
Примеры можно смотреть на commandlinefu.com
$ man bash | head
BASH(1) BASH(1)
NAME
bash - GNU Bourne-Again SHell
SYNOPSIS
bash [options] [file]
на русском желательно.
да и документация и мануал не одно и тоже. но я юмор оценил. спасибо.
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'ы тебе для этого почитать, да?
ну ты же догадался куда тебе идти?
Ну да, автор честно предупреждают (и я с ним согласен что "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/
Керниган, Пайк - 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
Мануал и мануал — не одно и то же.
лучше подскажите идею для решения задачки:
посчитать размер всех мп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 переведи.
и как ты предлагаешь переименовывать коллекцию? через подчёркивания или просто пробелы все выпилить?
через подчёркивания
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
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[.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
и лучше потолще по пространнее и с примерами. а то я чё-то гуглом пользоваться разучился.на русском желательно.