Ну, то что в ДОСе это делали 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), либо писать самому простейшие (как правило) скрипты с циклами.
no subject
А что значит "раскрыть 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), либо писать самому простейшие (как правило) скрипты с циклами.