#!/bin/bash
#find -type f -printf '%P\n' | parallel -j+0 ~/Скрипты/transcodev2.sh "{}" ~/Музыка.ogg
input="$1"
corr_name=$(echo "$input" | sed 's/[\?\*\:]/_/g')
output="$2/$corr_name"
mkdir -p "$(dirname "$output")"
if [[ $input == *.flac ]]
then
avconv -i "$input" -c:a libvorbis -q:a 10 "${output%.flac}".ogg < /dev/null
else
cp "$input" "$output"
fi
Суть проста: все flac в моей коллекции перегоняет в ogg, остальные файлы так и копирует, в итоге я получаю отдельную иерархию с перекодированными файлами, + имена адаптируются под FAT32.
Запускаю так:
cd Музыка && find -type f -printf '%P\n' | parallel -j+0 ~/Скрипты/transcodev2.sh "{}" ~/Музыка.ogg
Но мне надоело фактически вручную выполнять часть работы. Мне хотелось бы, чтобы всё это выполнялось скриптом, которому просто передаются как аргументы путь к входной коллекции и путь к выходной коллекции. Я попробовал всё содержимое скрипта назначить функцией, сделать ей export, и вот эти команды с find запихнуть в скрипт после объявления функции, но, по видимому, parallel не видит эту функцию, хотя я её и экспортировал. Не могли бы вы помочь мне с этим разобраться? Хотелось бы уместиться в один скрипт. Заранее спасибо
parallel на локальной системе запускает данную ему команду через
/bin/sh -c 'команда', а в debian это наверняка ссылка на dash,
который экспортированных переменных не понимает.