Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> код работал при наличии пробелов в именах файлов 
V
    Опции темы
arcsupport
Дата 15.12.2011, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Как сделать, что приведенный ниже код корректно работал при наличии пробелов в именах файлов:
Код

for i in "$(ls *.mp4)"; do ffmpeg -i "$i" "$i.avi"; done


Добавлено через 2 минуты и 25 секунд
Я так понимаю, надо как-то заставить ls экранировать пробелы.
PM MAIL   Вверх
newbee
Дата 15.12.2011, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 6
Всего: 19



Тут проблема не в ls, а в том, что for считает пробел разделителем. Сделай так:

Код
find . -name "*\.mp4" | while read i; do ffmpeg -i "$i" "$(echo $i | sed -e 's/\.mp4$/\.avi/')"; done


Это сообщение отредактировал(а) newbee - 15.12.2011, 10:51


--------------------
You're face to face
With man who sold the world
PM   Вверх
arcsupport
Дата 15.12.2011, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Делал подобное вчера ночью. Обрабатывался только первый файл. И всё.
PM MAIL   Вверх
newbee
Дата 15.12.2011, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 6
Всего: 19



Что-то "подобное" ты делал неправильно.

Добавлено через 3 минуты и 57 секунд
Отредактировала предыдущий комментарий, кавычки забыла поставить.


--------------------
You're face to face
With man who sold the world
PM   Вверх
arcsupport
Дата 15.12.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Спасибо. А не могли бы объяснить, что еще за возможность с заданием переменной
Код

IFS=$'\n'

PM MAIL   Вверх
newbee
Дата 15.12.2011, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 6
Всего: 19



Переменная IFS задает разделитель (или набор разделителей - я не помню) для for. Но он мне издавна не нравился, поэтому я про него сразу и не вспомнила. Тебе еще можно сделать так:

Код

IFS=$(echo -e "\n")
for i in "$(ls)"; do ... ; done



--------------------
You're face to face
With man who sold the world
PM   Вверх
arcsupport
Дата 15.12.2011, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Вот этот код с помощью ffmpeg все равно обработает только первый файл:
Код
#!/bin/sh
rm *.avi
ls *.mp4 | sort | while read i; do mv "$i" "$(echo "$i" | sed -e 's/\ /\./g')"; done
find . -name "*\.mp4" | sort | while read i; do ffmpeg -i $i $(echo "$i" | sed -e 's/\.mp4/\.avi/'); true; done
exit 0

PM MAIL   Вверх
newbee
Дата 16.12.2011, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 6
Всего: 19



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

Код

... do; echo -n | ffmpeg ... ; done



--------------------
You're face to face
With man who sold the world
PM   Вверх
arcsupport
Дата 16.12.2011, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Спасибо Вам большое, newbee. Если не секрет, объясните ход Ваших мыслей.
PM MAIL   Вверх
newbee
Дата 16.12.2011, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 6
Всего: 19



Пожалуйста.

Ход мыслей такой... Во время выполнения кодирования ffmpeg написал что-то вроде "нажми на q, чтобы выйти". Я ничего не трогала, но после обработки первого файла все закончилось. Вообще программа может проверить, запускается она прямо из шелла или нет (например, если она в цепочке конвеера) - и так я пришла к мысли выключить ее интерактивность, запихав в безобдный конвеер smile

Надеюсь, местные гуру шелла поднимут мои рассуждения на смех и объяснят истинную причину такого поведения программы.


--------------------
You're face to face
With man who sold the world
PM   Вверх
bilbobagginz
Дата 16.12.2011, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



если есть пробелы, то find должен знать + xargs тоже.
Код

find . -iname "*.bla" -print0 | xargs --no-run-if-empty -0 ffmpeg -flags



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
arcsupport
Дата 16.12.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



bilbobagginz, очень Вас прошу, приведите работающий пример для случая команды:
Код
find . -name "*\.mp4" | sort | while read i; do ffmpeg -i $i $(echo "$i" | sed -e 's/\.mp4/\.avi/'); true; done

PM MAIL   Вверх
bilbobagginz
Дата 17.12.2011, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



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

find . -iname "*.mp4" -print0 | xargs -0 -i ffmpeg -i '{}' '{}'.avi

не рабочий, т.к. потом надо будет делать цикл переименовки.





--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
arcsupport
Дата 19.12.2011, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Буду на некоторое время считать это вопрос решенным.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1016 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.