Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: bash, не работает скрипт  (Прочитано 1449 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Disaster1986

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
  • Что делает эта кнопка?
    • Просмотр профиля
bash, не работает скрипт
« : 15 Марта 2011, 16:45:59 »
Запускаю разными путями (из терминала, из файла скрипта) вот такую команду:
$(echo "rename 's|^[^0-9]*||g;s|[^0-9].*.|.|g;s|^|$(pwd | sed 's|.*/||g') - |g' *")Отказывается работать, выдаёт ошибку:
$ $(echo "rename 's|^[^0-9]*||g;s|[^0-9].*.|.|g;s|^|$(pwd | sed 's|.*/||g') - |g' *")
Can't find string terminator "'" anywhere before EOF at (eval 1) line 1.
Однако если запускать такую команду:
echo "rename 's|^[^0-9]*||g;s|[^0-9].*.|.|g;s|^|$(pwd | sed 's|.*/||g') - |g' *"а затем её выхлоп вводить в терминале - всё работает. Почему?

(Нажмите, чтобы показать/скрыть)


Пользователь решил продолжить мысль 15 Марта 2011, 17:07:09:
Нашел способ выполнить это в одну строчку
echo "rename 's|^[^0-9]*||g;s|[^0-9].*\.|\.|g;s|^|$(pwd | sed 's|.*/||g') - |g' *" > ~/file.sh && bash ~/file.sh && rm ~/file.shНо это же тупо... Ни у кого идей нет?
« Последнее редактирование: 15 Марта 2011, 17:07:09 от Disaster1986 »

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: bash, не работает скрипт
« Ответ #1 : 15 Марта 2011, 18:33:33 »
Это тебе не шелл говорит, а перл из доморощенной программы rename.

Оффлайн Disaster1986

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
  • Что делает эта кнопка?
    • Просмотр профиля
Re: bash, не работает скрипт
« Ответ #2 : 15 Марта 2011, 19:50:00 »
Это тебе не шелл говорит, а перл из доморощенной программы rename.
Как бы то ни было, не нравится ему то, что его вызывают именно таким образом. Как показано в последнем примере, если вызвать ту же команду, но по другому - всё заработает. Осталось только понять, почему первый способ не подходит, а затем его исправить.

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: bash, не работает скрипт
« Ответ #3 : 15 Марта 2011, 19:55:07 »
Зачем rename, если есть mv?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн Disaster1986

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
  • Что делает эта кнопка?
    • Просмотр профиля
Re: bash, не работает скрипт
« Ответ #4 : 15 Марта 2011, 20:19:08 »
Можно и через mv попробовать. Но регулярка то та же самая будет. А проблема, насколько я понял, в ней

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: bash, не работает скрипт
« Ответ #5 : 15 Марта 2011, 20:30:59 »
Дайте пример имени файла и что должно получиться.
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн Disaster1986

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
  • Что делает эта кнопка?
    • Просмотр профиля
Re: bash, не работает скрипт
« Ответ #6 : 15 Марта 2011, 21:07:14 »
Ну вот например это. Пример простой конечно, в ходе многочисленных экспериментов всё сложное переименовалось как надо. В папке с именем "Toradora!" лежат следующие файлы:
(Нажмите, чтобы показать/скрыть)
Обращаю ваше внимание на то, что здесь присутствуют не все файлы, нет 7-го и 2-го. Задача - привести имена файлов к виду "Toradora! - 03.mp4; Toradora! - 04.mp4" и т.д. Скрипт должен быть универсальным, то есть обрабатывать точно так же названия вида ToRaDoRa[02].mkv и т.п., именно для этого и читается имя папки.
« Последнее редактирование: 15 Марта 2011, 21:10:01 от Disaster1986 »

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: bash, не работает скрипт
« Ответ #7 : 16 Марта 2011, 07:24:18 »
За два прохода средствами шелл:

ls | while read file; do mv -v "$file" "${file#\[*\] }"; done
ls | while read file; do mv -v "$file" "${file% (*).mp4}.mp4"; done

За один проход с перл:

ls | perl -lne '$old = $_; s/^\[.*\] (.*) \(.*\)/$1/; rename $old, $_'

На пробелы внимание обращаем, резервную копию каталога предварительно делаем, ликбез подтягиваем. Первый кусок кода из первого поста - это нечто - достаточно странным образом вызывалась команда (некий скрипт?) rename, которой передавалось два маловразумительных аргумента и глоб.

Оффлайн Disaster1986

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
  • Что делает эта кнопка?
    • Просмотр профиля
Re: bash, не работает скрипт
« Ответ #8 : 16 Марта 2011, 13:17:50 »
Мангуст, ваш вариант не полностью решает поставленную задачу. Процитирую себя, каким бы дурным тоном это ни было:
Скрипт должен быть универсальным, то есть обрабатывать точно так же названия вида ToRaDoRa[02].mkv и т.п.

Теперь по поводу "нечта" из первого поста. Во первых советую вам почитать про "некий скрипт". man renameВо вторых вот этот скрипт:
rename 's|^[^0-9]*||g;s|[^0-9].*.|.|g;s|^|имя сериала - |g' *убирает из имён всех файлов в текущей папке всё кроме первого встретившегося в имени числа (номера серии) и формата файла, а затем в начало вставляет "имя сериала - ". Так из названия вида "ToRaDoRa[02].mkv" мы получаем название вида "имя сериала - 02.mkv". Соответственно, каждый раз при запуске нужно изменять "имя сериала" на нужную строку, а это неудобно. Задача - изменить этот скрипт так, чтобы вместо "имя сериала" он брал название текущего каталога. Как-то так

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: bash, не работает скрипт
« Ответ #9 : 16 Марта 2011, 15:53:31 »
Не у всех Ubuntu на работе есть. Perl по умолчанию устанавливает эту утилиту как prename. А тут мастера с Дебиана (подозреваю) покудесничали:

% dpkg -S `which rename`
dpkg: файл /usr/bin/rename не найден.


Сидит эта штука в альтернативах. Ладно Специально для вас.

#!/bin/sh

# Usage: my_rename <directory>

dir=$(basename "$1")
cd "$1" && rename 's/.*?(\d{1,999}).*\./'"$dir"'-$1./' *
« Последнее редактирование: 16 Марта 2011, 16:01:01 от Мангуст »

Оффлайн Disaster1986

  • Автор темы
  • Участник
  • *
  • Сообщений: 246
  • Что делает эта кнопка?
    • Просмотр профиля
Re: bash, не работает скрипт
« Ответ #10 : 25 Марта 2011, 07:59:39 »
Как вариант.. Но всё равно не совсем то что я хотел

 

Страница сгенерирована за 0.069 секунд. Запросов: 25.