파일 목록에 스크립트 작성 도움말

파일 목록에 스크립트 작성 도움말

다음 명령을 사용하고 있습니다

 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(개행 문자)가 제거됩니다.

관련 정보