다음 명령을 사용하고 있습니다
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(개행 문자)가 제거됩니다.