Bash

解壓縮多個文件而不覆蓋同名文件

  • September 14, 2021

在我的腳本的早期階段,它需要解壓縮使用者提供的“x”數量的文件。在壓縮文件集中,存在名稱重複(但它們的內容彼此不同);即 zip1.zip 和 zip2.zip 都包含同名文件“d09483272”。

可以通過這樣做來解壓縮多個文件,unzip \*zip -d $M_DIR但這對於我的情況來說效率很低,因為新解壓縮的文件會覆蓋 $M_DIR 位置中已經存在的文件。

考慮用時間戳解壓縮它們 - 一些奇怪的嵌套循環,如下所示(顯然不起作用)

   for zip in *zip; do
           unzip -l *zip | while read file
           do
                   unzip -p *.zip ${file} > $(date "+%H:%M:%S:%s%N").pdf
           done
   done

如果這不是合適的方法,可能有更簡單的方法嗎?想法?

由於時間限制,我匆忙進行了一個不優雅的快速修復。

   for zip in $T_DIR*zip; do
           unzip $zip -d $M_DIR;
           rename "s/.pdf/$(date "+%s%N").pdf/" ${M_DIR}*;
   done

每個文件都單獨解壓縮到$T_DIR文件夾中,然後在其名稱中添加納秒時間戳。當下一波解壓文件進入該$T_DIR文件夾時,將不再有任何“名稱重複”。對更快/改進的解決方案的想法?

這只適用於“名稱重複”文件存在於單獨的 zip 文件中的警告。

看一下unzip-manpage:

-n     never overwrite existing files.  If a file already exists, skip the extraction
       of that file without prompting.

引用自:https://unix.stackexchange.com/questions/536398