zip + rar 파일에서 하위 디렉터리/하위 폴더 제거

zip + rar 파일에서 하위 디렉터리/하위 폴더 제거

.zip 및 .rar 파일이 많이 있습니다. 이러한 파일 중 다수에는 아카이브의 하위 폴더가 포함되어 있습니다. zip 파일에서 모든 폴더를 제거하고 다른 내용은 유지하고 싶습니다.

예를 들어

original.zip
- /foo/bar1.jpg 
- /foo/bar2.jpg
- /foo/bar3.jpg
- /foo/bar4.jpg

>>>

new.zip
- bar1.jpg 
- bar2.jpg
- bar3.jpg
- bar4.jpg

이는 순수 터미널 명령이거나 bash 스크립트일 수 있습니다. 100개의 zip/rar 파일을 동시에 실행할 수 있어야 합니다.

업데이트: zips + rar를 다시 생성하지 않으면 불가능한 것 같습니다.

그래서 저는 작은 bash 스크립트를 작성했습니다. 두 개의 디렉토리, 즉 후처리된 파일을 위한 "cleaned"와 압축이 풀린 파일을 위한 "temp"를 생성했습니다. 현재 디렉토리(.cbr 및 .cbz 파일)의 모든 아카이브를 반복하고, 각각의 새 파일에 대해 "깨끗한 이름"을 생성하고, 이전 파일을 임시 디렉토리에 압축을 풀고, 임시 파일에서 새 아카이브를 생성하고 저장합니다. "cleaned" 디렉터리에 깨끗한 이름을 사용하고 임시 폴더를 지웁니다. 모든 파일이 처리된 후 "temp" 디렉터리가 반복적으로 제거됩니다. 다음과 같습니다.

#!/bin/bash
echo "comic cleaning!";
echo "---------------";
dir=$(pwd)/;
tmp=${dir}temp/;
clean=$(pwd)/cleaned;
cd $dir;
mkdir -p cleaned;
mkdir -p temp;
for z in *.cb*; do 
  cd $dir;
  filename=$(basename "$z");
  rawname="${filename%.*}";
  name="${rawname// /_}";
  7z e "$dir$z" -otemp/;
  cd $tmp && zip -r $clean/$name.cbz *.jpg;
  cd $tmp && rm *.*;
done
cd $dir && rm -rf $tmp;

아마도 os /tmp 디렉토리를 사용해야 할 것입니다. 하지만 저는 아직 bash를 처음 접해서 작동시킬 수 없습니다. 최적화에 대한 제안 사항이 있습니까?

답변1

모든 파일 이름이 고유하면 작은 스크립트가 작동할 수 있습니다. 이런 조건이 있을까요?

original.zip
- /foo/bar1.jpg 
- /foo/bar2.jpg
- /zoo/bar1.jpg
- /zoo/bar2.jpg

파일을 덮어쓰게 됩니다. 더 나은 해결책은 새 파일 이름의 일부로 전체 경로를 입력하는 것입니다. 전:

foobar1.jpg foobar2.jpg Zoobar1.jpg Zoobar2.jpg

하지만 이렇게 하면 원본 파일 이름이 손실됩니다.

그냥 몇 가지 생각...

관련 정보