0

次のコードがあり、トランスコードが終了したら、新しく作成したファイルを移動したいと考えています。しかし、後でのみ、トランスコードするときに他のフォルダーに書き込みたくありません。そのため、前のexecがtrueを読み取った場合にのみ処理されるため、execを使用する方が良いと思います。また、現在のフォルダーには複数のファイルが存在する可能性があることに注意してください。

#!/bin/bash
#
# Change this to specify a different handbrake preset. You can list them by running:     "HandBrakeCLI --preset-list"
#
PRESET="AppleTV 2"
if [ -z "$1" ] ; then
TRANSCODEDIR="/path/to/folder"
else
TRANSCODEDIR="$1"
fi
find "$TRANSCODEDIR"/* -type f -exec bash -c 'HandBrakeCLI -i "$1" -o "${1%.*}".mp4 --    preset="$PRESET"' __ {} \; -exec rm {} \;

私のLinuxに関する知識はほとんどありません。

#!/bin/bash
#
# Change this to specify a different handbrake preset. You can list them by running:     "HandBrakeCLI --preset-list"
#
PRESET="AppleTV 2"
if [ -z "$1" ] ; then
TRANSCODEDIR="/path/to/folder"
else
TRANSCODEDIR="$1"
fi
find "$TRANSCODEDIR"/* -type f -exec bash -c 'HandBrakeCLI -i "$1" -o "${1%.*}".mp4 --    preset="$PRESET"' __ {} \; -exec rm {} \; -exec mv '"${1%.*}".mp4'     "/path to/converted/folder" \;

しかし、これは単に出力します:

mv: cannot stat â"${1%.*}".mpâ4: No such file or directory

今、これはメモ帳++の文字がどこかに隠れているのではないかと思ったので、dos2uunixを実行しました。しかし、それでも同じエラーが発生します。

「${1%. }」.mp4 は実際には新しく作成されたファイルを取得しているのではなく、存在しない「${1%.}」.mp4 というファイルを探していると考えています。

どんな助けでも大歓迎です。

4

2 に答える 2

1

findパラメータ置換をサポートしていないため${1%.*}、シェルに渡す必要があります。しかし幸いなことに、それを行うのはそれほど難しくありません。

find "$TRANSCODEDIR" -type f -exec bash -c 'HandBrakeCLI -i "$1" -o "${1%.*}".mp4 --    preset="$PRESET";
    rm "$1";
    mv "${1%.*}".mp4 "/path/to/converted/folder"' _ {} \;

明確にするために。「最上位」はfind -exec bash -c '...' _ {} \;であり、一重引用符内の Bash スクリプトには 3 つのコマンドが含まれており、それらはすべて同じ入力ファイルで動作します。

于 2013-09-24T17:45:00.543 に答える