
次のコマンドを使用しています
mkvmerge -o newfile.mkv 1.mkv +2.mkv +3.mkv +4.mkv etc...
このコマンドはリストのビデオファイルをソートします。通常、私はこのファイルをフォルダに入れます。ファイルの数は変更されることがあります(例のように常に4つではありません)。次のコマンドを受けたいです。
- 特定のディレクトリにあるmkvファイルのリストを取得します。
- 上記のコマンドを実行してください。
基本的に私はリストを取得する方法を知っています。 FileList=$(ls *mkv)) しかし、ファイル名の前に「+」をインポートする方法がわかりません(リストの最初の名前を除く)。
誰でも助けることができますか?
ピエール様こんにちは
答え1
LIST=''
for i in *.mkv; do
if [ -n "$LIST" ]; then LIST="$LIST +"; fi
LIST="$LIST$i"
done
mkvmerge -o newfile.mkv $LIST
リストが空であることをテストし、空の場合はスペースを追加する必要があります+
。次に、生成されたリストを使用してコマンドを実行します。
答え2
そしてbash
shopt -s nullglob
shopt -s extglob
first_file=1.mkv
add_files=(!(${first_file%.mkv}).mkv)
printf "%s\n" "${first_file}" "${add_files[@]/#/+}"
1.mkv
+2.mkv
+3.mkv
+4.mkv
mkvmerge -o newfile.mkv "${first_file}" "${add_files[@]/#/+}"
答え3
このメソッドはループを使用しません。
また、印刷できない文字(スペースなど)を含める場合は、ls -Q
ファイル名を引用してください。
eval "$(ls -Q1 *.mkv | sed '1s/^/mkvmerge -o newfile.mkv /; 1!s/^/ +/' | tr -d '\n')"
このtr
操作はバイトレベルで機能するため、ASCII以外のファイル名文字に含まれる\x0D(改行文字)は削除されます。