나는 내 컴퓨터에 대부분 형식으로 저장하는 만화책 모음집을 가지고 있습니다 .cbz
(ZIP 아카이브이지만 멋진 이름이 있습니다). 최근에 특정 만화 시리즈의 표지 콜라주를 만들기로 결정했는데, 이를 위해서는 만화책 아카이브의 첫 번째 파일이 필요했습니다.
문제의 분석은 다음과 같습니다.
.cbz
단일 폴더에 75개 파일;- 각 파일에는 와 같은 이름이 있으며
<series name> #<issue number>
문제 번호는 1부터 75까지입니다(한 가지 문제: 01, 02, 03 등과 같지 않으므로 정렬에 혼란이 있을 수 있습니다).- 각 아카이브 내의 각 파일 이름은 다음과 같습니다.
<issue name> <3-digit issue number with preceding zeros>
- 각 아카이브 내의 각 파일 이름은 다음과 같습니다.
- 필요한 경우 아카이브 이름을 바꿀 수 있지만
.zip
7Zip(및 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"