從 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 + rars,這似乎是不可能的。

所以我編寫了一個小 bash 腳本,它創建了兩個目錄,“cleaned”用於後處理文件,“temp”用於解壓縮文件。它會循環遍歷當前目錄中的所有存檔(.cbr 和 .cbz 檔案),為每個新檔案建立一個“乾淨的名稱”,將舊檔案解壓縮到臨時目錄,從臨時檔案建立一個新存檔並儲存它在「cleaned」目錄中使用clean 名稱,然後清除暫存資料夾。處理所有檔案後,「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

但這樣一來,您將丟失原始檔案名稱。

只是一些想法...

相關內容