Удалить подкаталоги / подпапки из файлов 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. Мне нужно иметь возможность запускать его на сотнях файлов zip/rar одновременно.

обновлять: Похоже, это невозможно без повторного создания zip- и rar-архивов.

Итак, я написал небольшой скрипт bash, он создает два каталога: "cleaned" для файлов после обработки и "temp" для распакованных файлов. Он проходит по всем архивам в текущем каталоге (файлы .cbr и .cbz), создает "clean name" для каждого нового файла, распаковывает старый файл во временный каталог, создает новый архив из временных файлов и сохраняет его с чистым именем в каталоге "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

Но при этом вы потеряете исходное имя файла.

Просто несколько мыслей...

Связанный контент