И ещё о Линуксе
Jun. 3rd, 2012 06:53 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Каждый раз, как я наивно предполагаю, что меня уже ничем не удивишь, Линуксу удаётся снова ввести меня в состояние полного охуения.
Ультратривиальная опция, которая присутствовала уже в вонючем дремучем забытом ДОСе 3.0 -- скопировать все файлы из директории А в неё же, изменив окончание (т.е. ручной бэкап) -- отсутствует. Во всяком случае, командой cp этого не сделать.
DOS / Windows:
copy *.m *.qq
Linux:
хрен вам, копируйте в другую директорию
Сотрудник мой, большой любитель командной строки, предложил написать цикл (for f in ...), что ни разу не решает задачу изменения окончаний.
no subject
Date: 2012-06-03 04:06 pm (UTC)no subject
Date: 2012-06-03 04:10 pm (UTC)no subject
Date: 2012-06-03 04:12 pm (UTC)no subject
Date: 2012-06-03 04:17 pm (UTC)Что же в ней нетривиального? :)
Почему раскрыть wildcard в первом аргументе можно, а во втором - нет?
Вернее, в чём трудность увидеть, что второй соответствует первому? (А если не соответствует, то выдать ошибку).
Повторюсь: в ДОСе это делали 20 лет назад.
no subject
Date: 2012-06-03 07:50 pm (UTC)А что значит "раскрыть 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), либо писать самому простейшие (как правило) скрипты с циклами.
no subject
Date: 2012-06-03 07:55 pm (UTC)А "озверение" моё - на уровне мировой скорби.
Гляньте, я там уважаемому Коту Бегемоту написал. Про устаревание понятий.
Можно продолжать выпендриваться и выкручиваться и писать циклы и скрипты, и гордиться тем, что мы можем всё, если только захотим.
А можно делать удобные - и понятные всем - вещи.
Это разница подходов. Принципиальная.
Именно поэтому Линукс был и останется маргинальным, годным только для очень малого процента узких специалистов. (Сумасшедших ненавистников майкрософта я не учитываю).
no subject
Date: 2012-06-03 10:23 pm (UTC)"Удобных и понятных всем" утилит на все случаи жизни не создашь. Абсолютно все виндовсовские утилиты с навороченным пользовательским интерфейсом, которые мне попадались (как самой Майкрософт, так и third party), имели "дырки" той или иной величины. Т.е. в каждой из них я сталкивался с отсутсвием поддержки именно мне нужного частного случая, просто не предусмотренного разработчиками. Интернет завален программами разного качества и весом от полутора до 50 мегабайт для решения на Виндоус задач , на которые грамотный пользователь Линукса потратит четыре строчки скрипта. Да и пользователь Виндоус тоже - если владеет средствами написания скриптов.
Не совсем понимаю, что Вы имеете в виду под "выпендриваться и выкручиваться и гордиться тем...".
Я не горжусь тем, что умею писать циклы и скрипты. Я просто умею решать поставленную передо мной задачу быстрым, элегантным и надежным способом. Командная строка - вещь нужная и полезная, и не случайно даже в Майкрософте это поняли - разработали относительно недавно Power Shell.
Насчет "принципиальной разницы подходов" - то это, извините, несерьезно. Уверяю Вас, для среднего пользователя что привычно, то и хорошо. Вот вы привыкли, что copy работает так, как в Windows, и вам кажется это очевидным и естественным. А я двадцать лет проработал на Юниксе, и мне кажется диким, что в Виндах нет нормального фильтра типа grep, и для поиска определенной строки текста в группе файлов надо сделать 35 кликов мышкой. To whom how.
Причина маргинальности Линукса вовсе не в том, о чем вы думаете. А в наличии дикого количества плохо совместимых и не очено хорошо поддерживаемых дистрибутивов. А так - вон Шауль Резник посадил своих родителей на Убунту, и они прекрасно справляются, и не знают, как их обделила жизнь :)
А вообще, скоро Гугль со своим Chrome OS сделает всё это нерелевантным. :)
no subject
Date: 2012-06-04 04:35 am (UTC)no subject
Date: 2012-06-03 04:15 pm (UTC)Какая командная оболочка у вас установлена?
no subject
Date: 2012-06-03 04:20 pm (UTC)Что значит "командная оболочка"?
Версия Линукса? - Федора 12я.
no subject
Date: 2012-06-03 07:33 pm (UTC)Читайте книги и документацию.
no subject
Date: 2012-06-03 07:53 pm (UTC)В Линуксе это как правило Bash shell. В Windows - cmd.exe
no subject
Date: 2012-06-03 07:00 pm (UTC)no subject
Date: 2012-06-03 07:02 pm (UTC)Но это только подтверждает то, что я сказал... :)
no subject
Date: 2012-06-03 07:32 pm (UTC)Всего лишь говорит о том, что инструменты надо знать. Шелл - часть инструментария. А при минимальном знании синтаксиса одного из шеллов можно написать практически что угодно.
При желании можно написать любой шелл, в том числе и такой, который будет поддерживать досовский убогий синтаксис.
no subject
Date: 2012-06-03 07:41 pm (UTC)Под окнами давно уже есть удобные программы - как например Total Commander - которые всё это делают за меня, и не требуют знания команд и подробного знакомства с синтаксисом.
Та команда, которую я бы написал в ДОСе, уже тоже давно никому не нужна, когда можно нажать +, *.m, F6, *.q, enter.
Работа с шеллом - понятие такое отжившее и устаревшее, как гусиные перья и восковые свечи. Только последние ещё могут иметь некоторый шарм, а первая - и того не имеет.
И, хотя проблема у меня (что очевидно), но она не во мне, а в
ослином упрямствеприверженности к традициям людей, которые "так привыкли" и им "так хорошо".no subject
Date: 2012-06-03 08:00 pm (UTC)http://wiki.linuxquestions.org/wiki/File_manager
Проблема в том, что люди почему-то считают, что привычное им извращение - норма. Это, кстати, не только к Линуксу относится.
И кстати, насчёт шелла - неумение и нежелание научиться им пользоваться - очень характерный признак.
no subject
Date: 2012-06-03 08:17 pm (UTC)Я не знаю, в чём заключается Ваша работа. Возможно, использование шелла в ней является необходимостью.
Я в первую очередь алгоритмист, во вторую программист и ни в какую - убеждённый использователь чего бы то ни было.
Если мне нужно решить задачу, то я хочу, чтобы у меня были для этого удобные инструменты; а если таковых нет, это мешает мне в работе.
С моей точки зрения, обсуждаемый вопрос подобен такому: вдруг появился компилятор, который не знает, что такое malloc, то есть вообще не знает -- но обладает набором других команд низкосистемного уровня, которые позволяют написать и malloc и многое другое, было бы желаение.
Но если мне нужен malloc, и если он существует уже 20 лет, то я не хочу осваивать инструменты, позволяющие его написать. Я утверждаю, что его отсутствие - свидетельство неудобства предоставленного мне инструмента.
no subject
Date: 2012-06-03 10:27 pm (UTC)Или потратить время и либо найти нужные вам утилиты для Линукса, либо потратить немножно времени и освоить шелл. Оно стоит того.
no subject
Date: 2012-06-04 04:32 am (UTC)К счастью, это не так, и суть моей работы ни на иоту не зависит от инструментария.
no subject
Date: 2012-06-03 10:31 pm (UTC)no subject
Date: 2012-06-03 11:14 pm (UTC)То что т.н. 'алгоритмисты' фантастически невежественны в программировани я знал и раньше, но то что свое невежество некоторые пытаются выдаваь за доблесть - это для меня ново...
no subject
Date: 2012-06-04 04:30 am (UTC)Могу культурный: всего наилучшего.
no subject
Date: 2012-06-04 02:23 am (UTC)no subject
Date: 2012-06-04 04:30 am (UTC)