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 ファイルに対して実行できる必要があります。

アップデート: zip と rar を再作成しないとこれは不可能のようです。

そこで、私は小さな bash スクリプトを書きました。このスクリプトは、後処理されたファイル用の「cleaned」と、解凍されたファイル用の「temp」という 2 つのディレクトリを作成します。このスクリプトは、現在のディレクトリ (.cbr および .cbz ファイル) 内のすべてのアーカイブをループし、新しいファイルごとに「クリーンな名前」を作成し、古いファイルを temp ディレクトリに解凍し、temp ファイルから新しいアーカイブを作成して「cleaned」ディレクトリにクリーンな名前で保存し、temp フォルダをクリアします。すべてのファイルが処理された後、「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

ファイルを上書きすることになります。より良い解決策としては、新しいファイル名の一部としてフルパスを入れることかもしれません。例:

foob​​ar1.jpg foobar2.jpg zoobar1.jpg zoobar2.jpg

しかし、これにより元のファイル名が失われます。

ただの考えですが...

関連情報