LINUX.ORG.RU

Помогите дураку с командой переименования файла


0

1

Маюсь тут дурью — темы для прошивки MIUI (android) рихтую. /почти стих/

Проблема в том, что надоело каждую минуту выполнять однотипные действия переименования файлов.

Вводная: есть файлы вида themepart (без расширения) Задача: хочу на хоткей в файлменеджере (krusader) повесить команду переименования файла в вид themepart.zip и обратно

man rename пугает меня (ну ни разу я не программист) какими-то «perlexpr», хотя там как раз пример похожий на мою задачу, только для всех файлов с заданным расширением.

Как правильно написать команды убрать/добавить нужное расширение только для выделенного в krusader файла?

★★★★★

Ответ на: комментарий от juk4windows

mv «$1» «$1.zip»

Спасибо.

Надо завязывать со спиртным по утрам :)

athost ★★★★★ ()
Ответ на: комментарий от anonymous

будет полезно вот это:

Тоже большое спасибо. Пошел трезветь и читать :)

athost ★★★★★ ()
Ответ на: комментарий от juk4windows

тогда уж так:

mv "$1" "${1/.zip/}"

кроме того нужно учитывать регистр.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

кроме того нужно учитывать регистр.

Спасибо, но там всегда нижний регистр.

/offtop/ Все таки ЛОР — торт

athost ★★★★★ ()
Последнее исправление: athost (всего исправлений: 1)
Ответ на: комментарий от tides

Надо использовать все возможности, а не городить не нужные костыли.

Зачем вызывать две дополнительные программы echo и sed, если можно использовать функционал командного интерпретатора., что будет к тому же и быстрее.

Кроме того bash - распространённая оболочка, даже если используется другая, то скорее всего она поддерживает указанный функционал.

kostik87 ★★★★★ ()
Ответ на: комментарий от juk4windows

«`echo »$1" | sed 's/.zip//'`"
$(basename $1 .zip)

хехе...

aol ★★★★★ ()
Ответ на: комментарий от kostik87

за тем, чтобы не башизм и не echo + sed ;)

aol ★★★★★ ()
Ответ на: комментарий от kostik87

Опять предложение использовать дополнительную утилиту, зачем ?

зато читабельно, можно и внутренний: ${...%.zip} получше вашего варианта

anonymous ()

А вот еще такой вопрос, исходя из описанной ситуации.

А почему все файлменеджеры и менеджеры архивов, f.e. krusader, fileroller, распознают мой файл lockscreen как архив zip, но при добавлении/замене какого-нибудь файла в этом архиве создают файл locksreen.zip только с измененными файлами?

Может быть можно как-то изменить такое поведение?

athost ★★★★★ ()
Последнее исправление: athost (всего исправлений: 1)
perl -e 'rename$_,/\.zip$/?$`:"$_.zip"for@ARGV' <список_файлов>

переименует тебе «filename.zip» <=> «filename».

arsi ★★★★★ ()
Ответ на: комментарий от kostik87

даже если используется другая, то скорее всего она поддерживает указанный функционал.

dash, busybox ash

lazyklimm ★★★★★ ()
Ответ на: комментарий от anonymous

По сути одно и тоже по результату, я использовал замену на пустую строку, вы - удаление, результат один и тот же.

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

kostik87 ★★★★★ ()
Ответ на: комментарий от lazyklimm

На czh, zsh, busybox ash работать будет.

На dash - нет, но это его проблемы.

kostik87 ★★★★★ ()
Ответ на: комментарий от lazyklimm

На dash будет работать ${1%.zip}, так же как и на всех других.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

По сути одно и тоже

Только в том случае, если в вашу «суть» не входит переносимость: %-то по посиксу.

вы - удаление, результат один и тот же.

Было бы странно, если бы результат отличался, не находите?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.