Скрипт для копирования файлов с возможностью указать новое расширение

Изображение пользователя Michael72.

Время от времени возникает нужда скопировать группу файлов таким образом, чтобы вместо старого расширение у их копий было новое. Однажды мне понадобилось скопировать массу файлов без расширения в другой каталог так, чтобы у скопированных файлов было расширение eml. Следуя привычному шаблону ДОСовской команды COPY я ввёл в терминале нечто подобное этому: $ cp * /home/michael/Документы/inbox.mbx/*.eml
cp: указанная цель `/home/michael/Документы/inbox.mbx/*.eml' не является каталогом

Оказывается bash обрабатывает метасимвол * (звездочка) и подставляет вместо звездочки все файлы в текущем каталоге. Таким образом, в вышеприведённом примере команда cp приняла параметры в виде cp ИСТОЧНИК... КАТАЛОГ. Короче говоря, пришлось создавать специальный скрипт для решения поставленной задачи.
Скрипту я дал имя mycopy. Текст скрипта:

Надеюсь, что краткая справка, находящаяся внутри скрипта поможет разобраться самостоятельно, как пользоваться скриптом.
При вызове скрипта важно, чтобы в параметрах метасимвол * (или ?) экранировался (обратный слэш -- \ -- служит для экранирования специальных символов, т.е. необходимо перед звездочкой ставить \), или чтобы параметр заключался в кавычки. Если пользователь забудет это сделать, в скрипте предусмотрен способ обнаружить это по тому признаку, что количество параметров больше двух. Но если пользователь ввёл команду в виде:
mycopy *.emlжелая скопировать все файлы в текущем каталоге с расширением eml в этот же каталог, но чтобы у копий файлов отсутствовало расширение. При этом, оказалось, что в текущем каталоге оказалось всего два файла, удовлетворяющих шаблону - 1.eml и 2.eml. Из-за ошибочного действия пользователя скрипт примет два параметра: 1-[1.eml] и 2-[2.eml] и в результате файл 1.eml скопируется в файл с расширением 2.eml, в итоге вместо двух новых 1 и 2, получится один 1.2.eml. Неожиданный результат. Чтобы избежать подобных случаев можно запускать скрипт без параметров, тогда появятся поочерёдно два запроса на ввод параметров и в этом случае можно не переживать по поводу экранирования метасимволов (можно заключать в одинарные кавычки, но не следует заключать в двойные).

Комментарии (5)

+1
Vlad_W_1999 - 25 Май, 2010 - 15:12

Ни в коем случае не хочу обидеть! И честно отплюсовал. Но... Меня вот групповое переименование в Krusader вполне устраивает...

0
Michael72 - 25 Май, 2010 - 18:05
Изображение пользователя Michael72.

Большое спасибо за сообщение. Я не знал про такую функцию в Krusader. Никогда не использовал это приложение. Я пользуюсь Dolphin, который стоит по умолчанию. А в нём, как я понимаю, ничего подобного нет.

0
tigris - 25 Май, 2010 - 21:14
Изображение пользователя tigris.

не стоит крусадер, пользуюсь стандартом, за скрипт спасибо +1

+1
Vlad_W_1999 - 26 Май, 2010 - 13:21

Господа, на сколько я знаю, есть ещё и KRename. Вполне штатный, на сколько я понимаю. Однако, скрипт, на мой взгляд, будет полезен в случае автоматизации каких-либо операций, выполняемых с помощью, скажем, шедулера.

0
Michael72 - 5 Июнь, 2010 - 11:43
Изображение пользователя Michael72.

Уникальное приложение! Спасибо.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры