ファイルリストへのスクリプト作成のヘルプ

ファイルリストへのスクリプト作成のヘルプ

次のコマンドを使用しています

 mkvmerge -o  newfile.mkv  1.mkv  +2.mkv  +3.mkv   +4.mkv  etc...

このコマンドはリストのビデオファイルをソートします。通常、私はこのファイルをフォルダに入れます。ファイルの数は変更されることがあります(例のように常に4つではありません)。次のコマンドを受けたいです。

  1. 特定のディレクトリにあるmkvファイルのリストを取得します。
  2. 上記のコマンドを実行してください。

基本的に私はリストを取得する方法を知っています。 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(改行文字)は削除されます。

関連情報