yurakolotov: (Default)
[personal profile] yurakolotov

Каждый раз, как я наивно предполагаю, что меня уже ничем не удивишь, Линуксу удаётся снова ввести меня в состояние полного охуения.

Ультратривиальная опция, которая присутствовала уже в вонючем дремучем забытом ДОСе 3.0 -- скопировать все файлы из директории А в неё же, изменив окончание (т.е. ручной бэкап) -- отсутствует. Во всяком случае, командой cp этого не сделать.

DOS / Windows:
copy *.m *.qq

Linux:
хрен вам, копируйте в другую директорию

Сотрудник мой, большой любитель командной строки, предложил написать цикл (for f in ...), что ни разу не решает задачу изменения окончаний.


Date: 2012-06-03 04:06 pm (UTC)
From: [identity profile] sacran.livejournal.com
Хм, а зачем Вам Линукс, если не секрет?

Date: 2012-06-03 04:10 pm (UTC)
From: [identity profile] yurakolotov.livejournal.com
На работе вынуждают.

Date: 2012-06-03 04:12 pm (UTC)
From: [identity profile] panikowsky.livejournal.com
Я бы не сказал, что это ультратривиальная опция. Да и задача в общем-то

Date: 2012-06-03 04:17 pm (UTC)
From: [identity profile] yurakolotov.livejournal.com
Мсье Паниковский, Вы меня огорчаете...
Что же в ней нетривиального? :)

Почему раскрыть wildcard в первом аргументе можно, а во втором - нет?

Вернее, в чём трудность увидеть, что второй соответствует первому? (А если не соответствует, то выдать ошибку).

Повторюсь: в ДОСе это делали 20 лет назад.

Date: 2012-06-03 07:50 pm (UTC)
From: [identity profile] panikowsky.livejournal.com
Ну, то что в ДОСе это делали 20 лет назад еще не служит рекомендацией. :)

А что значит "раскрыть wildcard" во втором случае?

В первом аргументе - очевидно: взять список файлов в текущей директории, у которых заданный extension (например, ".m"). А во втором? Список файлов с extension ".qq" получить невозможно, да и смысла большого нет: если вы еще не делали этого копирования, то файлов с ".qq" еще нету вообще. Вы, очевидно, имеете в виду, что wildcard во втором аргументе надо раскрыть так: взять по одному каждый результат раскрытия первого wildcardа, и заменить у него расширение с ".m" на ".qq". Потом взять по одному представителю из результата раскрытия wildcarda первого аргумента и результата раскрытия wildcarda второго аргумента, составить из них пары, а потом применить операцию копирования к каждой такой паре.

Вот это я и называю "нетривиальная процедура" :)

На самом деле, отличие досовского интерпретатора командной строки от юниксовского в том, что в ДОСе команда получает сам wildcard и должна позаботиться сама о его правильной интерпретации. Досовская команда del, например, каждый wildcard раскроет сама в список соотв. файлов. С другой стороны, copy в MSDos должна "знать", что если у нее два аргумента, и каждый - это wildcard, и эти wilcardы "подобны друг другу", т.е. например, оба состоят из звездочки, точки, и filename extension, то тогда первый wildcard надо раскрыть стандартным способом, т.е. из списка файлов, а второй - не раскрывать вообще, а взять из него новый extension, и проделать со всем этим то, что я перечислил в предыдущем абзаце. Т.е. в команду copy MSDos встроили специальный случай, чтобы делать базовый batch renaming. И я сильно подозреваю, что это было сделано именно потому, что сам интерпретатор командной строки MSDos в части написания скриптов - штука крайне корявая и бессистемная. Тем более, что как и всегда в ДОСе, "шаг влево, шаг вправо - расстрел на месте", т.е. небольшое отклонение от ограничений предусмотренного авторами утилиты случая, и утилита уже не годится. Попробуйте, например, при копировании помимо изменения extension добавить еще и какой-нибудь префикс к имени файла - не фига не выйдет.

В Юниксе (и в Линуксе) wildcards интерпретатор командной строки, и сама команда в качестве аргументов видит имена отдельных файлов. Именно поэтому "cp *.m *.qq" не будет работать так, как в ДОСе: В Юниксе интерпретатор сам раскроет wildcards и cp получит в качестве списка аргументов перечень файлов в текущей директории с этими расширениями (если они есть).

Для пакетной обработки в Юниксе надо либо искать дополнительные утилиты (как например, mrename, которая есть в Ubuntu, не знаю насчет Fedora), либо писать самому простейшие (как правило) скрипты с циклами.

Edited Date: 2012-06-03 07:54 pm (UTC)

Date: 2012-06-03 07:55 pm (UTC)
From: [identity profile] yurakolotov.livejournal.com
Да я это сам понимаю.
А "озверение" моё - на уровне мировой скорби.
Гляньте, я там уважаемому Коту Бегемоту написал. Про устаревание понятий.

Можно продолжать выпендриваться и выкручиваться и писать циклы и скрипты, и гордиться тем, что мы можем всё, если только захотим.
А можно делать удобные - и понятные всем - вещи.

Это разница подходов. Принципиальная.

Именно поэтому Линукс был и останется маргинальным, годным только для очень малого процента узких специалистов. (Сумасшедших ненавистников майкрософта я не учитываю).

Date: 2012-06-03 10:23 pm (UTC)
From: [identity profile] panikowsky.livejournal.com
Вы смешиваете в кучу разные вещи. На самом деле, мне кажется, тут вопроч в том, должен ли грамотный пользователь владеть командной строкой и скриптами, или во всем положиться на разработчиков операционной системы и дополнительных аппликаций?

"Удобных и понятных всем" утилит на все случаи жизни не создашь. Абсолютно все виндовсовские утилиты с навороченным пользовательским интерфейсом, которые мне попадались (как самой Майкрософт, так и third party), имели "дырки" той или иной величины. Т.е. в каждой из них я сталкивался с отсутсвием поддержки именно мне нужного частного случая, просто не предусмотренного разработчиками. Интернет завален программами разного качества и весом от полутора до 50 мегабайт для решения на Виндоус задач , на которые грамотный пользователь Линукса потратит четыре строчки скрипта. Да и пользователь Виндоус тоже - если владеет средствами написания скриптов.

Не совсем понимаю, что Вы имеете в виду под "выпендриваться и выкручиваться и гордиться тем...".
Я не горжусь тем, что умею писать циклы и скрипты. Я просто умею решать поставленную передо мной задачу быстрым, элегантным и надежным способом. Командная строка - вещь нужная и полезная, и не случайно даже в Майкрософте это поняли - разработали относительно недавно Power Shell.

Насчет "принципиальной разницы подходов" - то это, извините, несерьезно. Уверяю Вас, для среднего пользователя что привычно, то и хорошо. Вот вы привыкли, что copy работает так, как в Windows, и вам кажется это очевидным и естественным. А я двадцать лет проработал на Юниксе, и мне кажется диким, что в Виндах нет нормального фильтра типа grep, и для поиска определенной строки текста в группе файлов надо сделать 35 кликов мышкой. To whom how.

Причина маргинальности Линукса вовсе не в том, о чем вы думаете. А в наличии дикого количества плохо совместимых и не очено хорошо поддерживаемых дистрибутивов. А так - вон Шауль Резник посадил своих родителей на Убунту, и они прекрасно справляются, и не знают, как их обделила жизнь :)

А вообще, скоро Гугль со своим Chrome OS сделает всё это нерелевантным. :)

Date: 2012-06-04 04:35 am (UTC)
From: [identity profile] yurakolotov.livejournal.com
Насчёт грепа - согласен, не хватает.

Date: 2012-06-03 04:15 pm (UTC)
From: [identity profile] panikowsky.livejournal.com
... не из числа наиболее распространенных (я понимаю, что Вам так не кажется, но тем не менее.)

Какая командная оболочка у вас установлена?

Date: 2012-06-03 04:20 pm (UTC)
From: [identity profile] yurakolotov.livejournal.com
Поторопился ответить.

Что значит "командная оболочка"?
Версия Линукса? - Федора 12я.

Date: 2012-06-03 07:33 pm (UTC)
From: [identity profile] kot-begemot.livejournal.com
Тяжёлый случай. Учите матчасть.
Читайте книги и документацию.

Date: 2012-06-03 07:53 pm (UTC)
From: [identity profile] panikowsky.livejournal.com
Command shell, по-русски -- "командная оболочка", a.k.a. "интерпретатор командной строки".
В Линуксе это как правило Bash shell. В Windows - cmd.exe

Date: 2012-06-03 07:00 pm (UTC)
From: [identity profile] kot-begemot.livejournal.com
for i in *.m do; cp $i ${i/\.m/.qq}; done
Edited Date: 2012-06-03 07:01 pm (UTC)

Date: 2012-06-03 07:02 pm (UTC)
From: [identity profile] yurakolotov.livejournal.com
Спасибо, я учту на будущее.
Но это только подтверждает то, что я сказал... :)

Date: 2012-06-03 07:32 pm (UTC)
From: [identity profile] kot-begemot.livejournal.com
Нет, не подтверждает.
Всего лишь говорит о том, что инструменты надо знать. Шелл - часть инструментария. А при минимальном знании синтаксиса одного из шеллов можно написать практически что угодно.
При желании можно написать любой шелл, в том числе и такой, который будет поддерживать досовский убогий синтаксис.

Date: 2012-06-03 07:41 pm (UTC)
From: [identity profile] yurakolotov.livejournal.com
В том-то и проблема.
Под окнами давно уже есть удобные программы - как например Total Commander - которые всё это делают за меня, и не требуют знания команд и подробного знакомства с синтаксисом.

Та команда, которую я бы написал в ДОСе, уже тоже давно никому не нужна, когда можно нажать +, *.m, F6, *.q, enter.

Работа с шеллом - понятие такое отжившее и устаревшее, как гусиные перья и восковые свечи. Только последние ещё могут иметь некоторый шарм, а первая - и того не имеет.

И, хотя проблема у меня (что очевидно), но она не во мне, а в ослином упрямстве приверженности к традициям людей, которые "так привыкли" и им "так хорошо".
Edited Date: 2012-06-03 07:43 pm (UTC)

Date: 2012-06-03 08:00 pm (UTC)
From: [identity profile] kot-begemot.livejournal.com
Вот тут приведён список десятка "файл менеджеров" для Линукса (зачем они нормальному человеку нужны - вопрос второй):
http://wiki.linuxquestions.org/wiki/File_manager
Проблема в том, что люди почему-то считают, что привычное им извращение - норма. Это, кстати, не только к Линуксу относится.
И кстати, насчёт шелла - неумение и нежелание научиться им пользоваться - очень характерный признак.

Date: 2012-06-03 08:17 pm (UTC)
From: [identity profile] yurakolotov.livejournal.com
Мне кажется, что это разница подходов, которая, в свою очередь, следует из разницы нужд.

Я не знаю, в чём заключается Ваша работа. Возможно, использование шелла в ней является необходимостью.

Я в первую очередь алгоритмист, во вторую программист и ни в какую - убеждённый использователь чего бы то ни было.

Если мне нужно решить задачу, то я хочу, чтобы у меня были для этого удобные инструменты; а если таковых нет, это мешает мне в работе.

С моей точки зрения, обсуждаемый вопрос подобен такому: вдруг появился компилятор, который не знает, что такое malloc, то есть вообще не знает -- но обладает набором других команд низкосистемного уровня, которые позволяют написать и malloc и многое другое, было бы желаение.
Но если мне нужен malloc, и если он существует уже 20 лет, то я не хочу осваивать инструменты, позволяющие его написать. Я утверждаю, что его отсутствие - свидетельство неудобства предоставленного мне инструмента.

Date: 2012-06-03 10:27 pm (UTC)
From: [identity profile] panikowsky.livejournal.com
Тогда вам надо менять работу. На такую, где вам позволят наконец работать на любимой Виндоус.
Или потратить время и либо найти нужные вам утилиты для Линукса, либо потратить немножно времени и освоить шелл. Оно стоит того.
Edited Date: 2012-06-03 10:33 pm (UTC)

Date: 2012-06-04 04:32 am (UTC)
From: [identity profile] yurakolotov.livejournal.com
Если бы суть работы состояла в осваивании шелла и утилит, то следовало бы это сделать или, действительно, менять работу. Вернее, не наниматься на неё изначально.

К счастью, это не так, и суть моей работы ни на иоту не зависит от инструментария.

Date: 2012-06-03 10:31 pm (UTC)
From: [identity profile] panikowsky.livejournal.com
Почему, собственно, отсутствие привычного Вам malloc - это свидетельство "неудобства предоставленного ... инструмента"? Malloc() вообще говоря, не обязан присутствовать. Надо освоить имеющийся в вашем распоряжении инструмент, а не капризничать как малое дитя.

Date: 2012-06-03 11:14 pm (UTC)
From: [identity profile] kot-begemot.livejournal.com
Для справки: НИ ОДИН компилятор понятия не имеет, что такое malloc. Потому что это не термин языка, а билиотечная функция, реализованная в стандартной библиотеке. И таки да, существуют платформы, где malloc отсутствует.
То что т.н. 'алгоритмисты' фантастически невежественны в программировани я знал и раньше, но то что свое невежество некоторые пытаются выдаваь за доблесть - это для меня ново...

Date: 2012-06-04 04:30 am (UTC)
From: [identity profile] yurakolotov.livejournal.com
Адекватного ответа я Вам на это дать не могу.
Могу культурный: всего наилучшего.

Date: 2012-06-04 02:23 am (UTC)
From: [identity profile] levchin.livejournal.com
Happy Birthday about!!

Date: 2012-06-04 04:30 am (UTC)
From: [identity profile] yurakolotov.livejournal.com
Спасибо!

Profile

yurakolotov: (Default)
yurakolotov

February 2025

S M T W T F S
      1
2345678
910111213 1415
16171819202122
232425262728 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 24th, 2025 11:40 am
Powered by Dreamwidth Studios