0

*.mkv ファイルを *.avi ファイルに変換する bash スクリプトがあります。外観は次のとおりです。

#!/bin/bash
for f in $(ls *mkv | sed ‘s/\(.*\)\..*/\1/’)
do
ffmpeg -i $f.mkv -sameq $f.avi
done

ただし、このスクリプトで実行する必要があるのは、すべてのフォルダーで *.mkv ファイルを再帰的に検索し、ffmpeg コマンドを実行して出力を同じディレクトリに保存する必要があることです。

誰かが私を助けることができますか?:-)

4

5 に答える 5

4
find /some/path -name '*.mkv' | while read f
do
    ffmpeg -i "$f" -sameq "${f:0:-4}.avi"
done
于 2012-05-26T20:24:18.573 に答える
2

このようにしてみてください:

find <file_path> -name '*.mkv' -exec sh -c 'mv "$0" "${0%%.mkv}.avi"' {} \;
于 2012-05-26T20:19:22.850 に答える
1
#!/bin/bash
find . -name "*.mkv" -exec ffmpeg -i {} -sameq `basename {} .mkv`.avi \;
于 2012-05-26T20:36:38.267 に答える
1

@Raulのおかげで、これは私にとってうまくいったことであり、ディレクトリを再帰的に実行し、mkvファイルでffmpegコマンドを実行するという、私がやりたかったことの解決策です。

#!/bin/bash
find <file_path> -name '*.mkv' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mkv}.avi"' {} \;
exit;
于 2012-05-27T15:47:15.963 に答える
0

ls *.mkv使用する代わりにfind . -name "*.mkv"

これは、変なファイル名がないことを前提としています (スペースや改行はありません)。別の可能性はfind、 と組み合わせて使用​​することxargsです。xargs マニュアルは有益な読み物であり、いつかスクリプト作成の命を救うでしょう :-)

于 2012-05-26T20:22:13.770 に答える