한 배치로 cbz 파일에서 첫 번째 파일을 추출하는 방법은 무엇입니까?

한 배치로 cbz 파일에서 첫 번째 파일을 추출하는 방법은 무엇입니까?

나는 내 컴퓨터에 대부분 형식으로 저장하는 만화책 모음집을 가지고 있습니다 .cbz(ZIP 아카이브이지만 멋진 이름이 있습니다). 최근에 특정 만화 시리즈의 표지 콜라주를 만들기로 결정했는데, 이를 위해서는 만화책 아카이브의 첫 번째 파일이 필요했습니다.

문제의 분석은 다음과 같습니다.

  • .cbz단일 폴더에 75개 파일;
  • 각 파일에는 와 같은 이름이 있으며 <series name> #<issue number>문제 번호는 1부터 75까지입니다(한 가지 문제: 01, 02, 03 등과 같지 않으므로 정렬에 혼란이 있을 수 있습니다).
    • 각 아카이브 내의 각 파일 이름은 다음과 같습니다.<issue name> <3-digit issue number with preceding zeros>
  • 필요한 경우 아카이브 이름을 바꿀 수 있지만 .zip7Zip(및 unrar는 아니지만 일부 다른 아카이브)이 CBZ를 충분히 잘 처리한다는 것을 알고 있습니다.

내가 필요한 것:

  • 75개 아카이브 각각의 첫 번째 파일. 파일에는 이미 고유한 이름이 있으므로 출력 시 이름을 바꿀 필요가 없습니다.

내가 가진 것:

  • 우분투 16.04
  • 7Zip
  • 인터넷 연결

어떻게 해야 이런 일이 발생하나요? 폴더에 있는 모든 아카이브의 첫 번째 파일을 동일한 폴더로 추출하는 명령은 무엇입니까?

답변1

출력 파일의 이름을 바꿀 필요가 없다면 다음과 같이 제안합니다.

#!/bin/bash

for file in *.cbz
do
 cover="`zipinfo -2 "$file" | awk 'NR==2 {exit} 1'`"
 unzip -j "$file" "$cover"
done;

다음과 같은 파일에 저장하고 script.sh만화와 동일한 디렉토리에 넣으십시오. 그런 다음 실행 권한을 부여하십시오.

chmod +x script.sh

그리고 실행하세요:

./script.sh

어떻게 작동하나요?

다음을 사용하여 zip 아카이브 내의 모든 파일 목록을 얻을 수 있습니다 zipinfo.

zipinfo -2 mycomic.cbz

다음과 비슷한 내용이 출력됩니다.

First file within the archive.jpg
Second file within the archive.jpg
...

그런 다음 를 사용하면 awk 'NR==1 { print }'다음과 같은 첫 번째 파일 이름을 반환할 수 있습니다 First file within the archive.jpg.

이제 이 파일을 추출하려면 다음과 같은 방법을 사용할 수 있습니다 unzip.

unzip -j mycomic.cbz "First file within the archive.jpg"

관련 정보