2015-11-15 24 views
0

Я тестируя Баш замены имени файла с расширением параметра, как показано здесь: How to change file extension in Linux shell script?Bash: с помощью {} заменить расширение имени файла

Однако, я не могу показаться, чтобы получить следующую работу, как я намерен:

данные следующие файлы:

tmp/01. Losing A Whole Year.flac 
tmp/02. Narcolepsy.flac 

Я бег find для FLAC файлов в parallel запуске echo команды для вывода тестирования. Я пытаюсь заменить .flac на .mp3.

find tmp -type f -name '*.flac' | time parallel -j+0 --eta 'echo "{} {.flac%%.mp3}"' 

Мой вывод:

tmp/01. Losing A Whole Year.flac {.flac%%.mp3} 
tmp/02. Narcolepsy.flac {.flac%%.mp3} 

Я планирую использовать это с ffmpeg, если это делает разницу.

Edit: Ожидаемый результат:

tmp/01. Losing A Whole Year.flac tmp/01. Losing A Whole Year.mp3 
tmp/02. Narcolepsy.flac tmp/02. Narcolepsy.mp3 

Edit 2: Чтобы заменить расширение файла, я могу использовать:

find tmp -type f -name '*.flac' | time parallel -j+0 --eta 'echo "{} {.flac%%.mp3}"' 

Однако, это дает следующие выходные данные

tmp/01. Losing A Whole Year.flac tmp/01.\ Losing\ A\ Whole\ Year.mp3 
tmp/02. Narcolepsy.flac tmp/02.\ Narcolepsy.mp3 

Возможно, теперь это вопрос ffmpeg, потому что ffm peg не сможет найти файл, если вместо символа пробега есть символ \.

+0

Все работает не так, как ожидалось, потому что вы используете параллельные замены, а не Bash. Подстановки Bash имеют префикс '$'. –

ответ

1

Я думаю, что я понял это:

find tmp -type f -name '*.flac' | time parallel -j+0 --eta 'echo "{} {.}.mp3"' 

приведет к ожидаемым результатам.

Хотя, я не знаю, почему это не работает:

find tmp -type f -name '*.flac' | time parallel -j+0 --eta 'echo "{} {.flac}.mp3"' 

Edit: Хотя выше, кажется, работает, \ символы вставляются заменить пробелы, которые могли бы привести FFmpeg не найдите нужные файлы.

Смежные вопросы