Как обрабатывать пространство имен файлов и символов с помощью команды НАЙТИ - PullRequest
0 голосов
/ 21 мая 2018

Добрый день всем, я работаю над сценарием bash, чтобы объединить несколько mp3-файлов в один.Код работает нормально, но не может обрабатывать имя файла с пробелом или символами.Ниже приведен код.Подскажите, пожалуйста, что я делаю не так.Спасибо

for file in $(find . -type f -name "*.mp3" -print0 | xargs -0 ); do
  ffmpeg -i "concat:intro.mp3|"$file"|outro.mp3" -acodec copy "${file%.mp3}-".mp3;
done

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

find имеет флаг -exec, позволяющий вызывать сценарии с результатами поиска.

например, создание простого вспомогательного сценария addxtros.sh:

#!/bin/sh
infile=$1
outfile=${infile%.mp3}-.mp3 
ffmpeg -i "concat:intro.mp3|${infile}|outro.mp3" -acodec copy "${outfile}"

, который вы можете использоватьэто как:

find . -type f -name "*.mp3" -exec ./addxtros.sh {} ";"
0 голосов
/ 21 мая 2018

Вы можете использовать find вместе с командой bash -c (которая позволяет передавать 2 аргумента ffmpeg):

 find . -type f -name "*.mp3" -exec bash -c 'ffmpeg -i "concat:intro.mp3|$1|outro.mp3" -acodec copy "${1%.mp3}-.mp3"' _ {} \;
0 голосов
/ 21 мая 2018

чтение встроенного с -d и пустым аргументом для использования символа NUL в качестве разделителя входных записей

while IFS= read -r -d '' file; do
    ffmpeg -i "concat:intro.mp3|$file|outro.mp3" -acodec copy "${file%.mp3}-".mp3;
done < <(find . -type f -name "*.mp3" -print0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...