2015-11-18 2 views
0

Я хотел бы автоматизировать преобразование видео с помощью сценариев оболочки Linux. Я использую HandBrakeCLI на ubuntu 14.04 с моими индивидуальными параметрами. Но я застрял в определенной точке. Это то, что я хотел бы сделать в псевдокоде:Как пройти полный путь к файлу с пробелами в сценарий оболочки Linux?

# watch a specific folder (A) 
- if a (source) file is older then 1d process it 
- as soon as the process is finished move the source file into folder (B) 
- the target for the new file is folder (C) 
# process the files 
1. find all the new files (older then 1d) within (A) 
2. get the full path of the file and store it 
3. replace the source folder path (A) with the target folder (C) 
4. start conversion with HandBrakeCLI like: 
    HandBrake $options $sourcefile $targetfile 

Первая часть с конкретной проверкой папки я охватываемая с этим кодом:

find $A -name "*.mkv" -ctime +1 -print0 

Я хотел бы передать абсолютный путь исходный файл из папки (A) в мой скрипт «convertMkv». Хитрая часть здесь:

find $A -name "*.mkv" -ctime +1 -print0 | xargs -0 -I {} ./convertMkv "{}" "$C" ; 

Я хотел бы передать исходный файл из папки (A) и целевую папку (C), чтобы мой сценарий преобразования, который подготовит необходимые пути и вызвать HandBrakeCLI.

А образцы путей для исходных файлов могут быть:

"/ TMP/Видео Interest.mkv"

"/ TMP/Файл \ Папка/Lion_King.mkv"

"/tmp/Avatar.mkv"


Это мой сценарий 'convertMkv':

#!/bin/bash 
source="$HOME/handbrake/.raw" 
target="$2" 

OPT="" 
OPT="$OPT --verbose" 
OPT="$OPT --encode x264" 
OPT="$OPT --quality 20.0" 
OPT="$OPT --format mp4" 
... 

# ----------------------------------------------------------------------------- 
# mkv2mp4() 
# ----------------------------------------------------------------------------- 
function mkv2mp4 
{ 
    input=$1 
    output=$2 

    HandBrakeCLI $OPT -i "$input" -o "$output" 2>&1 | tee "/tmp/log/Test.log" 
} 

function main 
{ 
    path="${1%/*}" 
    file="${1##*/}" 
    newPath="${path##/*/}" 

    mkv2mp4 $1 $target/$newPath/$file 
} 

main [email protected] 
exit 0 
+0

http://shellcheck.net/ поймает категорию ошибок, ответственных за такого рода вопрос (который должен скажем, неадекватное цитирование). –

+0

BTW, используя ключевое слово 'function' - плохая форма - делает ваш код несовместимым с стандартом POSIX sh без добавления какого-либо значения. Просто определите свои функции как 'main() {', а не 'function main {'. –

ответ

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