5

まず、私は自分の問題を探し回った。しかし、誰もそれを解決することはできません。

ディレクトリ内のすべてのビデオ ファイルを変換したいのですが、出力は別のディレクトリに保存されます。覚えていない場所から bash スクリプトを取得しました。

#!/bin/bash

SRC="/home/abc/public_html/filex/store/vids/toriko/VIDEOS HERE"
DEST="/home/abc/public_html/filex/store/vids/toriko/51-100"
DEST_EXT=mp4
HANDBRAKE_CLI=HandBrakeCLI
PRESET="iPhone & iPod Touch"

for FILE in "`ls $SRC`"
do
filename=$(basename $FILE)
extension=${filename##*.}
filename=${filename%.*}

$HANDBRAKE_CLI -i "$SRC"/$FILE -o "$DEST"/"$filename".$DEST_EXT "$PRESET"

done

問題は、ファイルの出力がファイル名なしで..「.mp4」のみになることです。そして、生成されるファイルは 1 つだけです。つまり、フォルダ内の 50 個のビデオから、「.mp4」という名前のファイルが 1 つだけ生成され、その後 HandBrakeCLI が終了します。誰かが私のコードを修正できますか? 私はbashコーディングの経験がありません..なので、適切なスクリプトを提供していただければ幸いです:)

4

5 に答える 5

4

あなたのライン

for FILE in "`ls $SRC`"

は、ファイルのリストを含む反復を 1 つだけ効果的に作成FILEします (また、 のスペースを処理することはできません$SRC)。に置き換えた方が良い

for FILE in "$SRC"/*

例:

$ ls test
1.txt  2.txt
$ SRC=test; for f in "`ls $SRC`" ; do echo $f; done
1.txt 2.txt
$ SRC=test; for f in "$SRC"/* ; do echo $f; done
test/1.txt
test/2.txt

補足:問題なくそこにスペースを確保できます

$ ls "the test"
1.txt  2.txt
$ SRC="the test"; for f in "$SRC"/* ; do echo $f; done
the test/1.txt
the test/2.txt
于 2013-10-24T10:25:06.510 に答える
0

上記で提案した変更を加えて、このスクリプトを使用してみました。スペースを含むファイル名を処理するには、$FILE の 2 つの使用を二重引用符で囲む必要があることがわかりました。

そう...

filename=$(ベース名 "$FILE")

$HANDBRAKE_CLI -i "$SRC"/"$FILE" -o "$DEST"/"$filename".$DEST_EXT "$PRESET"

于 2015-02-28T15:30:04.373 に答える